Exemple #1
0
        public int PeformFFT(RenderTexture[] data0, RenderTexture[] data1, RenderTexture[] data2)
        {
            if (ButterFlyLookupTable == null)
            {
                return(-1);
            }

            if (SystemInfo.supportedRenderTargetCount < 3)
            {
                throw new InvalidOperationException("System does not support at least 3 render targets");
            }

            var pass0 = new RenderTexture[] { data0[0], data1[0], data2[0] };
            var pass1 = new RenderTexture[] { data0[1], data1[1], data2[1] };

            int i;
            int idx = 0;
            int idx1;
            int j = 0;

            for (i = 0; i < Passes; i++, j++)
            {
                idx  = j % 2;
                idx1 = (j + 1) % 2;

                FourierMaterial.SetTexture("_ButterFlyLookUp", ButterFlyLookupTable[i]);

                FourierMaterial.SetTexture("_ReadBuffer0", data0[idx1]);
                FourierMaterial.SetTexture("_ReadBuffer1", data1[idx1]);
                FourierMaterial.SetTexture("_ReadBuffer2", data2[idx1]);

                if (idx == 0)
                {
                    RTUtility.MultiTargetBlit(pass0, FourierMaterial, PASS_X_3);
                }
                else
                {
                    RTUtility.MultiTargetBlit(pass1, FourierMaterial, PASS_X_3);
                }
            }

            for (i = 0; i < Passes; i++, j++)
            {
                idx  = j % 2;
                idx1 = (j + 1) % 2;

                FourierMaterial.SetTexture("_ButterFlyLookUp", ButterFlyLookupTable[i]);

                FourierMaterial.SetTexture("_ReadBuffer0", data0[idx1]);
                FourierMaterial.SetTexture("_ReadBuffer1", data1[idx1]);
                FourierMaterial.SetTexture("_ReadBuffer2", data2[idx1]);

                if (idx == 0)
                {
                    RTUtility.MultiTargetBlit(pass0, FourierMaterial, PASS_Y_3);
                }
                else
                {
                    RTUtility.MultiTargetBlit(pass1, FourierMaterial, PASS_Y_3);
                }
            }

            return(idx);
        }
Exemple #2
0
        /// <summary>
        /// Initialize the enabled buffers with the current conditions spectrum for this time.
        /// </summary>
        protected override void Initilize(WaveSpectrumCondition condition, float time)
        {
            if (InitMaterial == null)
            {
                throw new InvalidOperationException("GPU buffer has not had its Init material set");
            }

            if (InitPass == -1)
            {
                throw new InvalidOperationException("GPU buffer has not had its Init material pass set");
            }

            InitMaterial.SetTexture("Ceto_Spectrum01", (condition.Spectrum01 != null) ? condition.Spectrum01 : Texture2D.blackTexture);
            InitMaterial.SetTexture("Ceto_Spectrum23", (condition.Spectrum23 != null) ? condition.Spectrum23 : Texture2D.blackTexture);
            InitMaterial.SetTexture("Ceto_WTable", condition.WTable);
            InitMaterial.SetVector("Ceto_InverseGridSizes", condition.InverseGridSizes());
            InitMaterial.SetVector("Ceto_GridSizes", condition.GridSizes);
            InitMaterial.SetVector("Ceto_Offset", m_offset);
            InitMaterial.SetFloat("Ceto_Time", time);

            m_tmpList.Clear();

            int count = m_buffers.Length;

            for (int i = 0; i < count; i++)
            {
                if (!m_buffers[i].disabled)
                {
                    m_tmpList.Add(m_buffers[i].data[1]);
                }
            }

            count = m_tmpList.Count;

            if (count == 0)
            {
                return;
            }
            else if (count == 1)
            {
                Graphics.Blit(null, m_tmpList[0], InitMaterial, InitPass);
            }
            else if (count == 2)
            {
                m_tmpBuffer2[0] = m_tmpList[0].colorBuffer;
                m_tmpBuffer2[1] = m_tmpList[1].colorBuffer;
                RTUtility.MultiTargetBlit(m_tmpBuffer2, m_tmpList[0].depthBuffer, InitMaterial, InitPass);
            }
            else if (count == 3)
            {
                m_tmpBuffer3[0] = m_tmpList[0].colorBuffer;
                m_tmpBuffer3[1] = m_tmpList[1].colorBuffer;
                m_tmpBuffer3[2] = m_tmpList[2].colorBuffer;
                RTUtility.MultiTargetBlit(m_tmpBuffer3, m_tmpList[0].depthBuffer, InitMaterial, InitPass);
            }
            else if (count == 4)
            {
                m_tmpBuffer4[0] = m_tmpList[0].colorBuffer;
                m_tmpBuffer4[1] = m_tmpList[1].colorBuffer;
                m_tmpBuffer4[2] = m_tmpList[2].colorBuffer;
                m_tmpBuffer4[3] = m_tmpList[3].colorBuffer;
                RTUtility.MultiTargetBlit(m_tmpBuffer4, m_tmpList[0].depthBuffer, InitMaterial, InitPass);
            }
        }
Exemple #3
0
        public int PeformFFT(RenderTexture[] data0, RenderTexture[] data1, RenderTexture[] data2, RenderTexture[] data3)
        {
            if (this.m_butterflyLookupTable == null)
            {
                return(-1);
            }
            if (SystemInfo.supportedRenderTargetCount < 4)
            {
                throw new InvalidOperationException("System does not support at least 4 render targets");
            }
            this.m_pass0RT4[0] = data0[0].colorBuffer;
            this.m_pass0RT4[1] = data1[0].colorBuffer;
            this.m_pass0RT4[2] = data2[0].colorBuffer;
            this.m_pass0RT4[3] = data3[0].colorBuffer;
            this.m_pass1RT4[0] = data0[1].colorBuffer;
            this.m_pass1RT4[1] = data1[1].colorBuffer;
            this.m_pass1RT4[2] = data2[1].colorBuffer;
            this.m_pass1RT4[3] = data3[1].colorBuffer;
            RenderBuffer depthBuffer  = data0[0].depthBuffer;
            RenderBuffer depthBuffer2 = data0[1].depthBuffer;
            int          num          = 0;
            int          num2         = 0;
            int          i            = 0;

            while (i < this.m_passes)
            {
                num = num2 % 2;
                int num3 = (num2 + 1) % 2;
                this.m_fourier.SetTexture("Ceto_ButterFlyLookUp", this.m_butterflyLookupTable[i]);
                this.m_fourier.SetTexture("Ceto_ReadBuffer0", data0[num3]);
                this.m_fourier.SetTexture("Ceto_ReadBuffer1", data1[num3]);
                this.m_fourier.SetTexture("Ceto_ReadBuffer2", data2[num3]);
                this.m_fourier.SetTexture("Ceto_ReadBuffer3", data3[num3]);
                if (num == 0)
                {
                    RTUtility.MultiTargetBlit(this.m_pass0RT4, depthBuffer, this.m_fourier, 6);
                }
                else
                {
                    RTUtility.MultiTargetBlit(this.m_pass1RT4, depthBuffer2, this.m_fourier, 6);
                }
                i++;
                num2++;
            }
            i = 0;
            while (i < this.m_passes)
            {
                num = num2 % 2;
                int num3 = (num2 + 1) % 2;
                this.m_fourier.SetTexture("Ceto_ButterFlyLookUp", this.m_butterflyLookupTable[i]);
                this.m_fourier.SetTexture("Ceto_ReadBuffer0", data0[num3]);
                this.m_fourier.SetTexture("Ceto_ReadBuffer1", data1[num3]);
                this.m_fourier.SetTexture("Ceto_ReadBuffer2", data2[num3]);
                this.m_fourier.SetTexture("Ceto_ReadBuffer3", data3[num3]);
                if (num == 0)
                {
                    RTUtility.MultiTargetBlit(this.m_pass0RT4, depthBuffer, this.m_fourier, 7);
                }
                else
                {
                    RTUtility.MultiTargetBlit(this.m_pass1RT4, depthBuffer2, this.m_fourier, 7);
                }
                i++;
                num2++;
            }
            return(num);
        }
Exemple #4
0
        /// <summary>
        /// Perform fourier transform on four textures.
        /// </summary>
        public int PeformFFT(RenderTexture[] data0, RenderTexture[] data1, RenderTexture[] data2, RenderTexture[] data3)
        {
            if (m_butterflyLookupTable == null)
            {
                return(-1);
            }

            if (SystemInfo.supportedRenderTargetCount < 4)
            {
                throw new InvalidOperationException("System does not support at least 4 render targets");
            }

            //RenderTexture[] pass0 = new RenderTexture[] { data0[0], data1[0], data2[0], data3[0] };
            //RenderTexture[] pass1 = new RenderTexture[] { data0[1], data1[1], data2[1], data3[1] };

            m_pass0RT4[0] = data0[0].colorBuffer;
            m_pass0RT4[1] = data1[0].colorBuffer;
            m_pass0RT4[2] = data2[0].colorBuffer;
            m_pass0RT4[3] = data3[0].colorBuffer;

            m_pass1RT4[0] = data0[1].colorBuffer;
            m_pass1RT4[1] = data1[1].colorBuffer;
            m_pass1RT4[2] = data2[1].colorBuffer;
            m_pass1RT4[3] = data3[1].colorBuffer;

            RenderBuffer depth0 = data0[0].depthBuffer;
            RenderBuffer depth1 = data0[1].depthBuffer;

            int i;
            int idx = 0; int idx1;
            int j = 0;

            for (i = 0; i < m_passes; i++, j++)
            {
                idx  = j % 2;
                idx1 = (j + 1) % 2;

                m_fourier.SetTexture("Ceto_ButterFlyLookUp", m_butterflyLookupTable[i]);

                m_fourier.SetTexture("Ceto_ReadBuffer0", data0[idx1]);
                m_fourier.SetTexture("Ceto_ReadBuffer1", data1[idx1]);
                m_fourier.SetTexture("Ceto_ReadBuffer2", data2[idx1]);
                m_fourier.SetTexture("Ceto_ReadBuffer3", data3[idx1]);

                //if (idx == 0)
                //	RTUtility.MultiTargetBlit(pass0, m_fourier, PASS_X_4);
                //else
                //	RTUtility.MultiTargetBlit(pass1, m_fourier, PASS_X_4);

                if (idx == 0)
                {
                    RTUtility.MultiTargetBlit(m_pass0RT4, depth0, m_fourier, PASS_X_4);
                }
                else
                {
                    RTUtility.MultiTargetBlit(m_pass1RT4, depth1, m_fourier, PASS_X_4);
                }
            }

            for (i = 0; i < m_passes; i++, j++)
            {
                idx  = j % 2;
                idx1 = (j + 1) % 2;

                m_fourier.SetTexture("Ceto_ButterFlyLookUp", m_butterflyLookupTable[i]);

                m_fourier.SetTexture("Ceto_ReadBuffer0", data0[idx1]);
                m_fourier.SetTexture("Ceto_ReadBuffer1", data1[idx1]);
                m_fourier.SetTexture("Ceto_ReadBuffer2", data2[idx1]);
                m_fourier.SetTexture("Ceto_ReadBuffer3", data3[idx1]);

                //if (idx == 0)
                //	RTUtility.MultiTargetBlit(pass0, m_fourier, PASS_Y_4);
                //else
                //	RTUtility.MultiTargetBlit(pass1, m_fourier, PASS_Y_4);

                if (idx == 0)
                {
                    RTUtility.MultiTargetBlit(m_pass0RT4, depth0, m_fourier, PASS_Y_4);
                }
                else
                {
                    RTUtility.MultiTargetBlit(m_pass1RT4, depth1, m_fourier, PASS_Y_4);
                }
            }

            return(idx);
        }