public void Emit(Vector3 p)
        {
            uploadPositionList.Clear();
            uploadPositionList.Add(p);

            var counterOffset = 0;

            ComputeBuffer.CopyCount(deadList.Buffer, args.Buffer, counterOffset);

            compute.SetBuffer(kernelIDEmit, PROP_POSITION_LIST, positionList.Buffer);

            compute.SetInt(PROP_COUNTER_OFFSET, counterOffset);
            compute.SetBuffer(kernelIDEmit, PROP_COUNTER, args.Buffer);
            compute.SetBuffer(kernelIDEmit, PROP_DEAD_CONSUME_LIST, deadList.Buffer);
            compute.SetBuffer(kernelIDEmit, PROP_ALIVE_APPEND_LIST, aliveList.Buffer);

            compute.SetBuffer(kernelIDEmit, PROP_UPLOAD_POSITION_LIST, uploadPositionList.Buffer);

            compute.Dispatch(kernelIDEmit, uploadPositionList.Count, 1, 1);

#if false
            ComputeBuffer.CopyCount(deadList.Buffer, args.Buffer, 0);
            Debug.LogFormat("Dead list count={0}, ({1})",
                            args.Data[0], Join(",", deadList.Data));
            ComputeBuffer.CopyCount(aliveList.Buffer, args.Buffer, 0);
            Debug.LogFormat("Alive list count={0}, ({1})",
                            args.Data[0], Join(",", aliveList.Data));
#endif
        }
예제 #2
0
 private void Build()
 {
     if (buf != null && graph != null)
     {
         buf.Clear();
         buf.AddRange(values);
         graph.Peak  = Mathf.Max(Mathf.Abs(values.Max()), Mathf.Abs(values.Min()));
         graph.Input = buf;
     }
 }
예제 #3
0
        protected virtual void Rebuild()
        {
            vout.Clear();
            vin.Clear();
            indices.Clear();
            barycentric.Clear();
            foreach (var t in triangles)
            {
                var offset = vout.Count;
                vout.AddRange(t.VertexOutput);
                vin.AddRange(t.VertexInput);
                indices.AddRange(t.Indices.Select(i => i + offset));
                barycentric.AddRange(t.BarycentricWeights);
            }

            ReleaseBlendTex();
        }
예제 #4
0
    private void OnEnable()
    {
        we    = new WaveEquation1DBuf();
        graph = new BarGraphBuf();
        v     = new GPUList <float>();
        u0    = new GPUList <float>();
        u1    = new GPUList <float>();

        rend = GetComponent <Renderer>();

        validator.Reset();
        validator.Validation += () => {
            we.C        = speed;
            we.H        = 1000f / count;
            we.MaxSlope = maxSlope;

            graph.Peak = maxSlope * 2;

            time = 0f;
            dt   = Mathf.Min(we.SupDt(), Time.fixedDeltaTime) / (2 * quality);
            Debug.LogFormat("Set dt={0} for speed={1}", dt, speed);

            var dw     = 4f / count;
            var offset = dw * 0.5f * count;
            var dam    = Mathf.RoundToInt(0.1f * count);
            v.Clear();
            u0.Clear();
            u1.Clear();
            for (var i = 0; i < count; i++)
            {
                var w = 1f - Mathf.Clamp01(Mathf.Abs(dw * i - offset));
                u0.Add(w);
                u1.Add(0);
                v.Add(0);
            }
        };
    }