private void Start()
    {
        _myBufferAKernel = cs.FindKernel("BufferA");
        _myBufferBKernel = cs.FindKernel("BufferB");
        _myBufferCKernel = cs.FindKernel("BufferC");
        _myResetKernel   = cs.FindKernel("Reset");
        _myRenderKernel  = cs.FindKernel("Render");
        _myNormalKernel  = cs.FindKernel("Normals");

        var mySetup = new CCTextureSetup(width, height)
        {
            format     = RenderTextureFormat.RFloat,
            filterMode = FilterMode.Bilinear
        };

        _bufferA = new CCDoubleBufferedTexture(mySetup);
        _bufferB = new CCDoubleBufferedTexture(mySetup);
        _bufferC = new CCDoubleBufferedTexture(mySetup);
        _render  = CCDoubleBufferedTexture.CreateTexture(mySetup);

        var myNormalSetup = new CCTextureSetup(width, height)
        {
            format     = RenderTextureFormat.ARGBFloat,
            filterMode = FilterMode.Bilinear
        };

        _normals = CCDoubleBufferedTexture.CreateTexture(myNormalSetup);
        Reset();
    }
Exemple #2
0
        private void Start()
        {
            _advect  = compute.FindKernel("Advect2D");
            _force   = compute.FindKernel("Force");
            _pSetup  = compute.FindKernel("PSetup");
            _pFinish = compute.FindKernel("PFinish");
            _jacobi1 = compute.FindKernel("Jacobi1D");
            _jacobi2 = compute.FindKernel("Jacobi2D");

            _add2D = compute.FindKernel("Add2D");

            _shaderSheet = new Material(shader);

            _velocityKeep = AllocateBuffer(2);

            var rSetup = new CCTextureSetup(ResolutionX, ResolutionY)
            {
                format = RenderTextureFormat.RHalf
            };
            var rgSetup = new CCTextureSetup(ResolutionX, ResolutionY)
            {
                format = RenderTextureFormat.RGHalf
            };
            var rgbSetup = new CCTextureSetup(ResolutionX, ResolutionY)
            {
                format = RenderTextureFormat.ARGBHalf
            };

            _velocityBuffer = new CCDoubleBufferedTexture(rgSetup);
            _pressureBuffer = new CCDoubleBufferedTexture(rSetup);
            _externalBuffer = new CCDoubleBufferedTexture(rgbSetup);

            _colorRT1 = AllocateBuffer(4, width, height);
            _colorRT2 = AllocateBuffer(4, width, height);

            Graphics.Blit(initial, _colorRT1);
        }
Exemple #3
0
        private void Diffuse2D(int threadGroupsX, int threadGroupsY, int threadGroupsZ, Texture diffuseInB, CCDoubleBufferedTexture diffuseInOut, float diffuseAlpha, float diffuseBeta, int iterations)
        {
            compute.SetFloat("JacobiAlpha", diffuseAlpha);
            compute.SetFloat("JacobiBeta", diffuseBeta);
            compute.SetTexture(_jacobi2, "Jacobi2DInB", diffuseInB);

            // Jacobi iteration
            for (var i = 0; i < iterations; i++)
            {
                compute.SetTexture(_jacobi2, "Jacobi2DInX", diffuseInOut.ReadTex);
                compute.SetTexture(_jacobi2, "Jacobi2DOut", diffuseInOut.WriteTex);
                compute.Dispatch(_jacobi2, ThreadCountX, ThreadCountY, 1);
                diffuseInOut.Swap();
            }
        }