Ejemplo n.º 1
0
    void _UpdateVertex(List <Node> newPoints)
    {
        Assert.IsTrue(newPoints.Count <= InputNumMax);

        var inputNum = newPoints.Count;

        if (inputNum > 0)
        {
            _inputBuffer.SetData(newPoints.ToArray());
            if (_totalInputIdx < 0)
            {
                _startTime = Time.time;
            }
            _totalInputIdx += inputNum;
        }

        if (_totalInputIdx >= 0)
        {
            SetCommonParameterForCs();

            Cs.SetInt("_InputNum", inputNum);
            Cs.SetInt("_TotalInputIdx", _totalInputIdx);
            Cs.SetInt("_BufferSize", nodeNumPerTrail);
            Cs.SetFloat("_StartTime", _startTime);

            var kernel = Cs.FindKernel("CreateWidth");
            Cs.SetBuffer(kernel, "_InputBuffer", _inputBuffer);
            Cs.SetBuffer(kernel, "_NodeBuffer", nodeBuffer);
            Cs.SetBuffer(kernel, "_VertexBuffer", vertexBuffer);

            Cs.Dispatch(kernel, Mathf.CeilToInt((float)nodeBuffer.count / NUM_THREAD_X), 1, 1);
        }
    }
Ejemplo n.º 2
0
    protected override void UpdateVertex()
    {
        // AddNode
        SetCommonParameterForCs();

        var success = UpdateInputBuffer();

        if (success)
        {
            var kernel = Cs.FindKernel("AddNode");
            Cs.SetBuffer(kernel, "_InputBuffer", _inputBuffer);
            Cs.SetBuffer(kernel, "_TrailBufferW", _trailBuffer);
            Cs.SetBuffer(kernel, "_NodeBufferW", nodeBuffer);

            Cs.Dispatch(kernel, Mathf.CeilToInt((float)_trailBuffer.count / NUM_THREAD_X), 1, 1);

            // CreateWidth
            kernel = Cs.FindKernel("CreateWidth");
            Cs.SetBuffer(kernel, "_TrailBuffer", _trailBuffer);
            Cs.SetBuffer(kernel, "_NodeBuffer", nodeBuffer);
            Cs.SetBuffer(kernel, "_VertexBuffer", vertexBuffer);
            Cs.Dispatch(kernel, Mathf.CeilToInt((float)nodeBuffer.count / NUM_THREAD_X), 1, 1);
        }
    }