Example #1
0
        void OnRenderImage(RenderTexture src, RenderTexture dest)
        {
            if (silentError)
            {
                return;
            }

            if (!AmplifyUtils.IsInitialized)
            {
                AmplifyUtils.InitializeIds();
            }

            if (m_highPrecision)
            {
                AmplifyUtils.EnsureKeywordEnabled(m_bloomMaterial, AmplifyUtils.HighPrecisionKeyword, true);
                AmplifyUtils.EnsureKeywordEnabled(m_finalCompositionMaterial, AmplifyUtils.HighPrecisionKeyword, true);
                AmplifyUtils.CurrentRTFormat = RenderTextureFormat.DefaultHDR;
            }
            else
            {
                AmplifyUtils.EnsureKeywordEnabled(m_bloomMaterial, AmplifyUtils.HighPrecisionKeyword, false);
                AmplifyUtils.EnsureKeywordEnabled(m_finalCompositionMaterial, AmplifyUtils.HighPrecisionKeyword, false);
                AmplifyUtils.CurrentRTFormat = RenderTextureFormat.Default;
            }

            float totalCamRot = Mathf.Acos(Vector3.Dot(m_cameraTransform.right, Vector3.right));

            if (Vector3.Cross(m_cameraTransform.right, Vector3.right).y > 0)
            {
                totalCamRot = -totalCamRot;
            }


            RenderTexture lensFlareRT = null;
            RenderTexture lensGlareRT = null;

            if (!m_highPrecision)
            {
                m_bloomRange.y = 1 / m_bloomRange.x;

                m_bloomMaterial.SetVector(AmplifyUtils.BloomRangeId, m_bloomRange);
                m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomRangeId, m_bloomRange);
            }
            m_bloomParams.y = m_overallThreshold;

            m_bloomMaterial.SetVector(AmplifyUtils.BloomParamsId, m_bloomParams);
            m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomParamsId, m_bloomParams);

            int thresholdResDiv = 1;

            switch (m_mainThresholdSize)
            {
            case MainThresholdSizeEnum.Half: thresholdResDiv = 2; break;

            case MainThresholdSizeEnum.Quarter: thresholdResDiv = 4; break;
            }

            // CALCULATE THRESHOLD
            RenderTexture thresholdRT = AmplifyUtils.GetTempRenderTarget(src.width / thresholdResDiv, src.height / thresholdResDiv);

            if (m_maskTexture != null)
            {
                m_bloomMaterial.SetTexture(AmplifyUtils.MaskTextureId, m_maskTexture);
                Graphics.Blit(src, thresholdRT, m_bloomMaterial, ( int )BloomPasses.ThresholdMask);
            }
            else
            {
                Graphics.Blit(src, thresholdRT, m_bloomMaterial, ( int )BloomPasses.Threshold);
            }

            if (m_debugToScreen == DebugToScreenEnum.MainThreshold)
            {
                Graphics.Blit(thresholdRT, dest, m_bloomMaterial, ( int )BloomPasses.Decode);
                AmplifyUtils.ReleaseAllRT();
                return;
            }

            // DOWNSAMPLE
            bool          applyGaussian = true;
            RenderTexture downsampleRT  = thresholdRT;

            if (m_bloomDownsampleCount > 0)
            {
                applyGaussian = false;
                int tempW = thresholdRT.width;
                int tempH = thresholdRT.height;
                for (int i = 0; i < m_bloomDownsampleCount; i++)
                {
                    m_tempDownsamplesSizes[i].x = tempW;
                    m_tempDownsamplesSizes[i].y = tempH;
                    tempW = (tempW + 1) >> 1;
                    tempH = (tempH + 1) >> 1;
                    m_tempAuxDownsampleRTs[i] = AmplifyUtils.GetTempRenderTarget(tempW, tempH);
                    if (i == 0)
                    {
                        if (!m_temporalFilteringActive || m_gaussianSteps[i] != 0)
                        {
                            if (m_upscaleQuality == UpscaleQualityEnum.Realistic)
                            {
                                Graphics.Blit(downsampleRT, m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleWithKaris);
                            }
                            else
                            {
                                Graphics.Blit(downsampleRT, m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleWithoutKaris);
                            }
                        }
                        else
                        {
                            if (m_tempFilterBuffer != null && m_temporalFilteringActive)
                            {
                                float filterVal = m_temporalFilteringCurve.Evaluate(m_temporalFilteringValue);
                                m_bloomMaterial.SetFloat(AmplifyUtils.TempFilterValueId, filterVal);
                                m_bloomMaterial.SetTexture(AmplifyUtils.AnamorphicRTS[0], m_tempFilterBuffer);
                                if (m_upscaleQuality == UpscaleQualityEnum.Realistic)
                                {
                                    Graphics.Blit(downsampleRT, m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleWithTempFilterWithKaris);
                                }
                                else
                                {
                                    Graphics.Blit(downsampleRT, m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleWithTempFilterWithoutKaris);
                                }
                            }
                            else
                            {
                                if (m_upscaleQuality == UpscaleQualityEnum.Realistic)
                                {
                                    Graphics.Blit(downsampleRT, m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleWithKaris);
                                }
                                else
                                {
                                    Graphics.Blit(downsampleRT, m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleWithoutKaris);
                                }
                            }

                            bool createRT = false;
                            if (m_tempFilterBuffer != null)
                            {
                                if (m_tempFilterBuffer.format != m_tempAuxDownsampleRTs[i].format ||
                                    m_tempFilterBuffer.width != m_tempAuxDownsampleRTs[i].width ||
                                    m_tempFilterBuffer.height != m_tempAuxDownsampleRTs[i].height)
                                {
                                    CleanTempFilterRT();
                                    createRT = true;
                                }
                            }
                            else
                            {
                                createRT = true;
                            }

                            if (createRT)
                            {
                                CreateTempFilterRT(m_tempAuxDownsampleRTs[i]);
                            }

                            m_tempFilterBuffer.DiscardContents();
                            Graphics.Blit(m_tempAuxDownsampleRTs[i], m_tempFilterBuffer);
                            if (m_debugToScreen == DebugToScreenEnum.TemporalFilter)
                            {
                                Graphics.Blit(m_tempAuxDownsampleRTs[i], dest);
                                AmplifyUtils.ReleaseAllRT();
                                return;
                            }
                        }
                    }
                    else
                    {
                        Graphics.Blit(m_tempAuxDownsampleRTs[i - 1], m_tempAuxDownsampleRTs[i], m_bloomMaterial, ( int )BloomPasses.DownsampleNoWeightedAvg);
                    }

                    if (m_gaussianSteps[i] > 0)
                    {
                        ApplyGaussianBlur(m_tempAuxDownsampleRTs[i], m_gaussianSteps[i], m_gaussianRadius[i], i == 0);
                        if (m_temporalFilteringActive && m_debugToScreen == DebugToScreenEnum.TemporalFilter)
                        {
                            Graphics.Blit(m_tempAuxDownsampleRTs[i], dest);
                            AmplifyUtils.ReleaseAllRT();
                            return;
                        }
                    }
                }

                downsampleRT = m_tempAuxDownsampleRTs[m_featuresSourceId];
                AmplifyUtils.ReleaseTempRenderTarget(thresholdRT);
            }

            // BOKEH FILTER
            if (m_bokehFilter.ApplyBokeh && m_bokehFilter.ApplyOnBloomSource)
            {
                m_bokehFilter.ApplyBokehFilter(downsampleRT, m_bloomMaterial);
                if (m_debugToScreen == DebugToScreenEnum.BokehFilter)
                {
                    Graphics.Blit(downsampleRT, dest);
                    AmplifyUtils.ReleaseAllRT();
                    return;
                }
            }

            // FEATURES THRESHOLD
            RenderTexture featuresRT        = null;
            bool          releaseFeaturesRT = false;

            if (m_separateFeaturesThreshold)
            {
                m_bloomParams.y = m_featuresThreshold;
                m_bloomMaterial.SetVector(AmplifyUtils.BloomParamsId, m_bloomParams);
                m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomParamsId, m_bloomParams);
                featuresRT        = AmplifyUtils.GetTempRenderTarget(downsampleRT.width, downsampleRT.height);
                releaseFeaturesRT = true;
                Graphics.Blit(downsampleRT, featuresRT, m_bloomMaterial, ( int )BloomPasses.Threshold);
                if (m_debugToScreen == DebugToScreenEnum.FeaturesThreshold)
                {
                    Graphics.Blit(featuresRT, dest);
                    AmplifyUtils.ReleaseAllRT();
                    return;
                }
            }
            else
            {
                featuresRT = downsampleRT;
            }

            if (m_bokehFilter.ApplyBokeh && !m_bokehFilter.ApplyOnBloomSource)
            {
                if (!releaseFeaturesRT)
                {
                    releaseFeaturesRT = true;
                    featuresRT        = AmplifyUtils.GetTempRenderTarget(downsampleRT.width, downsampleRT.height);
                    Graphics.Blit(downsampleRT, featuresRT);
                }

                m_bokehFilter.ApplyBokehFilter(featuresRT, m_bloomMaterial);
                if (m_debugToScreen == DebugToScreenEnum.BokehFilter)
                {
                    Graphics.Blit(featuresRT, dest);
                    AmplifyUtils.ReleaseAllRT();
                    return;
                }
            }

            // LENS FLARE
            if (m_lensFlare.ApplyLensFlare && m_debugToScreen != DebugToScreenEnum.Bloom)
            {
                lensFlareRT = m_lensFlare.ApplyFlare(m_bloomMaterial, featuresRT);
                ApplyGaussianBlur(lensFlareRT, m_lensFlare.LensFlareGaussianBlurAmount);
                if (m_debugToScreen == DebugToScreenEnum.LensFlare)
                {
                    Graphics.Blit(lensFlareRT, dest);
                    AmplifyUtils.ReleaseAllRT();
                    return;
                }
            }

            //ANAMORPHIC GLARE
            if (m_anamorphicGlare.ApplyLensGlare && m_debugToScreen != DebugToScreenEnum.Bloom)
            {
                lensGlareRT = AmplifyUtils.GetTempRenderTarget(downsampleRT.width, downsampleRT.height);

                m_anamorphicGlare.OnRenderImage(m_bloomMaterial, featuresRT, lensGlareRT, totalCamRot);
                if (m_debugToScreen == DebugToScreenEnum.LensGlare)
                {
                    Graphics.Blit(lensGlareRT, dest);
                    AmplifyUtils.ReleaseAllRT();
                    return;
                }
            }

            if (releaseFeaturesRT)
            {
                AmplifyUtils.ReleaseTempRenderTarget(featuresRT);
            }

            //BLUR
            if (applyGaussian)
            {
                ApplyGaussianBlur(downsampleRT, m_gaussianSteps[0], m_gaussianRadius[0]);
            }

            //UPSAMPLE

            if (m_bloomDownsampleCount > 0)
            {
                if (m_bloomDownsampleCount == 1)
                {
                    if (m_upscaleQuality == UpscaleQualityEnum.Realistic)
                    {
                        ApplyUpscale();
                        m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], m_tempUpscaleRTs[0]);
                    }
                    else
                    {
                        m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], m_tempAuxDownsampleRTs[0]);
                    }
                    m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[0], m_upscaleWeights[0]);
                }
                else
                {
                    if (m_upscaleQuality == UpscaleQualityEnum.Realistic)
                    {
                        ApplyUpscale();
                        for (int i = 0; i < m_bloomDownsampleCount; i++)
                        {
                            int id = m_bloomDownsampleCount - i - 1;
                            m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[id], m_tempUpscaleRTs[i]);
                            m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[id], m_upscaleWeights[i]);
                        }
                    }
                    else
                    {
                        for (int i = 0; i < m_bloomDownsampleCount; i++)
                        {
                            int id = m_bloomDownsampleCount - 1 - i;
                            m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[id], m_tempAuxDownsampleRTs[id]);
                            m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[id], m_upscaleWeights[i]);
                        }
                    }
                }
            }
            else
            {
                m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], downsampleRT);
                m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[0], 1);
            }

            if (m_debugToScreen == DebugToScreenEnum.Bloom)
            {
                m_finalCompositionMaterial.SetFloat(AmplifyUtils.SourceContributionId, 0);
                FinalComposition(0, 1, src, dest, 0);
                return;
            }


            // FINAL COMPOSITION
            // LENS FLARE
            if (m_bloomDownsampleCount > 1)
            {
                for (int i = 0; i < m_bloomDownsampleCount; i++)
                {
                    m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtWeightsStr[m_bloomDownsampleCount - i - 1], m_lensDirtWeights[i]);
                    m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensStarburstWeightsStr[m_bloomDownsampleCount - i - 1], m_lensStarburstWeights[i]);
                }
            }
            else
            {
                m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtWeightsStr[0], m_lensDirtWeights[0]);
                m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensStarburstWeightsStr[0], m_lensStarburstWeights[0]);
            }
            if (m_lensFlare.ApplyLensFlare)
            {
                m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensFlareRTId, lensFlareRT);
            }

            //LENS GLARE
            if (m_anamorphicGlare.ApplyLensGlare)
            {
                m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensGlareRTId, lensGlareRT);
            }

            // LENS DIRT
            if (m_applyLensDirt)
            {
                m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensDirtRTId, m_lensDirtTexture);
                m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtStrengthId, m_lensDirtStrength * MaxDirtIntensity);

                if (m_debugToScreen == DebugToScreenEnum.LensDirt)
                {
                    FinalComposition(0, 0, src, dest, 2);
                    return;
                }
            }

            // LENS STARBURST
            if (m_applyLensStardurst)
            {
                m_starburstMat[0, 0] = Mathf.Cos(totalCamRot);
                m_starburstMat[0, 1] = -Mathf.Sin(totalCamRot);
                m_starburstMat[1, 0] = Mathf.Sin(totalCamRot);
                m_starburstMat[1, 1] = Mathf.Cos(totalCamRot);

                m_finalCompositionMaterial.SetMatrix(AmplifyUtils.LensFlareStarMatrixId, m_starburstMat);
                m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensFlareStarburstStrengthId, m_lensStarburstStrength * MaxStarburstIntensity);
                m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensStarburstRTId, m_lensStardurstTex);

                if (m_debugToScreen == DebugToScreenEnum.LensStarburst)
                {
                    FinalComposition(0, 0, src, dest, 1);
                    return;
                }
            }

            if (m_targetTexture != null)
            {
                m_targetTexture.DiscardContents();
                FinalComposition(0, 1, src, m_targetTexture, -1);
                Graphics.Blit(src, dest);
            }
            else
            {
                FinalComposition(1, 1, src, dest, -1);
            }
        }
Example #2
0
        private void OnRenderImage(RenderTexture src, RenderTexture dest)
        {
            if (this.silentError)
            {
                return;
            }
            if (!AmplifyUtils.IsInitialized)
            {
                AmplifyUtils.InitializeIds();
            }
            if (this.m_highPrecision)
            {
                AmplifyUtils.EnsureKeywordEnabled(this.m_bloomMaterial, AmplifyUtils.HighPrecisionKeyword, true);
                AmplifyUtils.EnsureKeywordEnabled(this.m_finalCompositionMaterial, AmplifyUtils.HighPrecisionKeyword, true);
                AmplifyUtils.CurrentRTFormat = RenderTextureFormat.DefaultHDR;
            }
            else
            {
                AmplifyUtils.EnsureKeywordEnabled(this.m_bloomMaterial, AmplifyUtils.HighPrecisionKeyword, false);
                AmplifyUtils.EnsureKeywordEnabled(this.m_finalCompositionMaterial, AmplifyUtils.HighPrecisionKeyword, false);
                AmplifyUtils.CurrentRTFormat = RenderTextureFormat.Default;
            }
            float num = Mathf.Acos(Vector3.Dot(this.m_cameraTransform.right, Vector3.right));

            if (Vector3.Cross(this.m_cameraTransform.right, Vector3.right).y > 0f)
            {
                num = -num;
            }
            RenderTexture renderTexture  = null;
            RenderTexture renderTexture2 = null;

            if (!this.m_highPrecision)
            {
                this.m_bloomRange.y = 1f / this.m_bloomRange.x;
                this.m_bloomMaterial.SetVector(AmplifyUtils.BloomRangeId, this.m_bloomRange);
                this.m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomRangeId, this.m_bloomRange);
            }
            this.m_bloomParams.y = this.m_overallThreshold;
            this.m_bloomMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams);
            this.m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams);
            int num2 = 1;
            MainThresholdSizeEnum mainThresholdSize = this.m_mainThresholdSize;

            if (mainThresholdSize != MainThresholdSizeEnum.Half)
            {
                if (mainThresholdSize == MainThresholdSizeEnum.Quarter)
                {
                    num2 = 4;
                }
            }
            else
            {
                num2 = 2;
            }
            RenderTexture tempRenderTarget = AmplifyUtils.GetTempRenderTarget(src.width / num2, src.height / num2);

            if (this.m_maskTexture != null)
            {
                this.m_bloomMaterial.SetTexture(AmplifyUtils.MaskTextureId, this.m_maskTexture);
                Graphics.Blit(src, tempRenderTarget, this.m_bloomMaterial, 1);
            }
            else
            {
                Graphics.Blit(src, tempRenderTarget, this.m_bloomMaterial, 0);
            }
            if (this.m_debugToScreen == DebugToScreenEnum.MainThreshold)
            {
                Graphics.Blit(tempRenderTarget, dest, this.m_bloomMaterial, 33);
                AmplifyUtils.ReleaseAllRT();
                return;
            }
            bool          flag           = true;
            RenderTexture renderTexture3 = tempRenderTarget;

            if (this.m_bloomDownsampleCount > 0)
            {
                flag = false;
                int num3 = tempRenderTarget.width;
                int num4 = tempRenderTarget.height;
                for (int i = 0; i < this.m_bloomDownsampleCount; i++)
                {
                    this.m_tempDownsamplesSizes[i].x = (float)num3;
                    this.m_tempDownsamplesSizes[i].y = (float)num4;
                    num3 = num3 + 1 >> 1;
                    num4 = num4 + 1 >> 1;
                    this.m_tempAuxDownsampleRTs[i] = AmplifyUtils.GetTempRenderTarget(num3, num4);
                    if (i == 0)
                    {
                        if (!this.m_temporalFilteringActive || this.m_gaussianSteps[i] != 0)
                        {
                            if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic)
                            {
                                Graphics.Blit(renderTexture3, this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 10);
                            }
                            else
                            {
                                Graphics.Blit(renderTexture3, this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 11);
                            }
                        }
                        else
                        {
                            if (this.m_tempFilterBuffer != null && this.m_temporalFilteringActive)
                            {
                                float value = this.m_temporalFilteringCurve.Evaluate(this.m_temporalFilteringValue);
                                this.m_bloomMaterial.SetFloat(AmplifyUtils.TempFilterValueId, value);
                                this.m_bloomMaterial.SetTexture(AmplifyUtils.AnamorphicRTS[0], this.m_tempFilterBuffer);
                                if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic)
                                {
                                    Graphics.Blit(renderTexture3, this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 12);
                                }
                                else
                                {
                                    Graphics.Blit(renderTexture3, this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 13);
                                }
                            }
                            else if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic)
                            {
                                Graphics.Blit(renderTexture3, this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 10);
                            }
                            else
                            {
                                Graphics.Blit(renderTexture3, this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 11);
                            }
                            bool flag2 = false;
                            if (this.m_tempFilterBuffer != null)
                            {
                                if (this.m_tempFilterBuffer.format != this.m_tempAuxDownsampleRTs[i].format || this.m_tempFilterBuffer.width != this.m_tempAuxDownsampleRTs[i].width || this.m_tempFilterBuffer.height != this.m_tempAuxDownsampleRTs[i].height)
                                {
                                    this.CleanTempFilterRT();
                                    flag2 = true;
                                }
                            }
                            else
                            {
                                flag2 = true;
                            }
                            if (flag2)
                            {
                                this.CreateTempFilterRT(this.m_tempAuxDownsampleRTs[i]);
                            }
                            this.m_tempFilterBuffer.DiscardContents();
                            Graphics.Blit(this.m_tempAuxDownsampleRTs[i], this.m_tempFilterBuffer);
                            if (this.m_debugToScreen == DebugToScreenEnum.TemporalFilter)
                            {
                                Graphics.Blit(this.m_tempAuxDownsampleRTs[i], dest);
                                AmplifyUtils.ReleaseAllRT();
                                return;
                            }
                        }
                    }
                    else
                    {
                        Graphics.Blit(this.m_tempAuxDownsampleRTs[i - 1], this.m_tempAuxDownsampleRTs[i], this.m_bloomMaterial, 9);
                    }
                    if (this.m_gaussianSteps[i] > 0)
                    {
                        this.ApplyGaussianBlur(this.m_tempAuxDownsampleRTs[i], this.m_gaussianSteps[i], this.m_gaussianRadius[i], i == 0);
                        if (this.m_temporalFilteringActive && this.m_debugToScreen == DebugToScreenEnum.TemporalFilter)
                        {
                            Graphics.Blit(this.m_tempAuxDownsampleRTs[i], dest);
                            AmplifyUtils.ReleaseAllRT();
                            return;
                        }
                    }
                }
                renderTexture3 = this.m_tempAuxDownsampleRTs[this.m_featuresSourceId];
                AmplifyUtils.ReleaseTempRenderTarget(tempRenderTarget);
            }
            if (this.m_bokehFilter.ApplyBokeh && this.m_bokehFilter.ApplyOnBloomSource)
            {
                this.m_bokehFilter.ApplyBokehFilter(renderTexture3, this.m_bloomMaterial);
                if (this.m_debugToScreen == DebugToScreenEnum.BokehFilter)
                {
                    Graphics.Blit(renderTexture3, dest);
                    AmplifyUtils.ReleaseAllRT();
                    return;
                }
            }
            bool          flag3 = false;
            RenderTexture renderTexture4;

            if (this.m_separateFeaturesThreshold)
            {
                this.m_bloomParams.y = this.m_featuresThreshold;
                this.m_bloomMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams);
                this.m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams);
                renderTexture4 = AmplifyUtils.GetTempRenderTarget(renderTexture3.width, renderTexture3.height);
                flag3          = true;
                Graphics.Blit(renderTexture3, renderTexture4, this.m_bloomMaterial, 0);
                if (this.m_debugToScreen == DebugToScreenEnum.FeaturesThreshold)
                {
                    Graphics.Blit(renderTexture4, dest);
                    AmplifyUtils.ReleaseAllRT();
                    return;
                }
            }
            else
            {
                renderTexture4 = renderTexture3;
            }
            if (this.m_bokehFilter.ApplyBokeh && !this.m_bokehFilter.ApplyOnBloomSource)
            {
                if (!flag3)
                {
                    flag3          = true;
                    renderTexture4 = AmplifyUtils.GetTempRenderTarget(renderTexture3.width, renderTexture3.height);
                    Graphics.Blit(renderTexture3, renderTexture4);
                }
                this.m_bokehFilter.ApplyBokehFilter(renderTexture4, this.m_bloomMaterial);
                if (this.m_debugToScreen == DebugToScreenEnum.BokehFilter)
                {
                    Graphics.Blit(renderTexture4, dest);
                    AmplifyUtils.ReleaseAllRT();
                    return;
                }
            }
            if (this.m_lensFlare.ApplyLensFlare && this.m_debugToScreen != DebugToScreenEnum.Bloom)
            {
                renderTexture = this.m_lensFlare.ApplyFlare(this.m_bloomMaterial, renderTexture4);
                this.ApplyGaussianBlur(renderTexture, this.m_lensFlare.LensFlareGaussianBlurAmount, 1f, false);
                if (this.m_debugToScreen == DebugToScreenEnum.LensFlare)
                {
                    Graphics.Blit(renderTexture, dest);
                    AmplifyUtils.ReleaseAllRT();
                    return;
                }
            }
            if (this.m_anamorphicGlare.ApplyLensGlare && this.m_debugToScreen != DebugToScreenEnum.Bloom)
            {
                renderTexture2 = AmplifyUtils.GetTempRenderTarget(renderTexture3.width, renderTexture3.height);
                this.m_anamorphicGlare.OnRenderImage(this.m_bloomMaterial, renderTexture4, renderTexture2, num);
                if (this.m_debugToScreen == DebugToScreenEnum.LensGlare)
                {
                    Graphics.Blit(renderTexture2, dest);
                    AmplifyUtils.ReleaseAllRT();
                    return;
                }
            }
            if (flag3)
            {
                AmplifyUtils.ReleaseTempRenderTarget(renderTexture4);
            }
            if (flag)
            {
                this.ApplyGaussianBlur(renderTexture3, this.m_gaussianSteps[0], this.m_gaussianRadius[0], false);
            }
            if (this.m_bloomDownsampleCount > 0)
            {
                if (this.m_bloomDownsampleCount == 1)
                {
                    if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic)
                    {
                        this.ApplyUpscale();
                        this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], this.m_tempUpscaleRTs[0]);
                    }
                    else
                    {
                        this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], this.m_tempAuxDownsampleRTs[0]);
                    }
                    this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[0], this.m_upscaleWeights[0]);
                }
                else if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic)
                {
                    this.ApplyUpscale();
                    for (int j = 0; j < this.m_bloomDownsampleCount; j++)
                    {
                        int num5 = this.m_bloomDownsampleCount - j - 1;
                        this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[num5], this.m_tempUpscaleRTs[j]);
                        this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[num5], this.m_upscaleWeights[j]);
                    }
                }
                else
                {
                    for (int k = 0; k < this.m_bloomDownsampleCount; k++)
                    {
                        int num6 = this.m_bloomDownsampleCount - 1 - k;
                        this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[num6], this.m_tempAuxDownsampleRTs[num6]);
                        this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[num6], this.m_upscaleWeights[k]);
                    }
                }
            }
            else
            {
                this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], renderTexture3);
                this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[0], 1f);
            }
            if (this.m_debugToScreen == DebugToScreenEnum.Bloom)
            {
                this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.SourceContributionId, 0f);
                this.FinalComposition(0f, 1f, src, dest, 0);
                return;
            }
            if (this.m_bloomDownsampleCount > 1)
            {
                for (int l = 0; l < this.m_bloomDownsampleCount; l++)
                {
                    this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtWeightsStr[this.m_bloomDownsampleCount - l - 1], this.m_lensDirtWeights[l]);
                    this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensStarburstWeightsStr[this.m_bloomDownsampleCount - l - 1], this.m_lensStarburstWeights[l]);
                }
            }
            else
            {
                this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtWeightsStr[0], this.m_lensDirtWeights[0]);
                this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensStarburstWeightsStr[0], this.m_lensStarburstWeights[0]);
            }
            if (this.m_lensFlare.ApplyLensFlare)
            {
                this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensFlareRTId, renderTexture);
            }
            if (this.m_anamorphicGlare.ApplyLensGlare)
            {
                this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensGlareRTId, renderTexture2);
            }
            if (this.m_applyLensDirt)
            {
                this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensDirtRTId, this.m_lensDirtTexture);
                this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtStrengthId, this.m_lensDirtStrength * 1f);
                if (this.m_debugToScreen == DebugToScreenEnum.LensDirt)
                {
                    this.FinalComposition(0f, 0f, src, dest, 2);
                    return;
                }
            }
            if (this.m_applyLensStardurst)
            {
                this.m_starburstMat[0, 0] = Mathf.Cos(num);
                this.m_starburstMat[0, 1] = -Mathf.Sin(num);
                this.m_starburstMat[1, 0] = Mathf.Sin(num);
                this.m_starburstMat[1, 1] = Mathf.Cos(num);
                this.m_finalCompositionMaterial.SetMatrix(AmplifyUtils.LensFlareStarMatrixId, this.m_starburstMat);
                this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensFlareStarburstStrengthId, this.m_lensStarburstStrength * 1f);
                this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensStarburstRTId, this.m_lensStardurstTex);
                if (this.m_debugToScreen == DebugToScreenEnum.LensStarburst)
                {
                    this.FinalComposition(0f, 0f, src, dest, 1);
                    return;
                }
            }
            if (this.m_targetTexture != null)
            {
                this.m_targetTexture.DiscardContents();
                this.FinalComposition(0f, 1f, src, this.m_targetTexture, -1);
                Graphics.Blit(src, dest);
            }
            else
            {
                this.FinalComposition(1f, 1f, src, dest, -1);
            }
        }
Example #3
0
 private void OnRenderImage(RenderTexture src, RenderTexture dest)
 {
     if (!this.silentError)
     {
         if (!AmplifyUtils.IsInitialized)
         {
             AmplifyUtils.InitializeIds();
         }
         if (this.m_highPrecision)
         {
             AmplifyUtils.EnsureKeywordEnabled(this.m_bloomMaterial, AmplifyUtils.HighPrecisionKeyword, true);
             AmplifyUtils.EnsureKeywordEnabled(this.m_finalCompositionMaterial, AmplifyUtils.HighPrecisionKeyword, true);
             AmplifyUtils.CurrentRTFormat = RenderTextureFormat.DefaultHDR;
         }
         else
         {
             AmplifyUtils.EnsureKeywordEnabled(this.m_bloomMaterial, AmplifyUtils.HighPrecisionKeyword, false);
             AmplifyUtils.EnsureKeywordEnabled(this.m_finalCompositionMaterial, AmplifyUtils.HighPrecisionKeyword, false);
             AmplifyUtils.CurrentRTFormat = RenderTextureFormat.Default;
         }
         float cameraRot = Mathf.Acos(Vector3.Dot(this.m_cameraTransform.right, Vector3.right));
         if (Vector3.Cross(this.m_cameraTransform.right, Vector3.right).y > 0f)
         {
             cameraRot = -cameraRot;
         }
         RenderTexture renderTexture = null;
         RenderTexture texture2      = null;
         if (!this.m_highPrecision)
         {
             this.m_bloomRange.y = 1f / this.m_bloomRange.x;
             this.m_bloomMaterial.SetVector(AmplifyUtils.BloomRangeId, this.m_bloomRange);
             this.m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomRangeId, this.m_bloomRange);
         }
         this.m_bloomParams.y = this.m_overallThreshold;
         this.m_bloomMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams);
         this.m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams);
         int num2 = 1;
         MainThresholdSizeEnum mainThresholdSize = this.m_mainThresholdSize;
         if (mainThresholdSize == MainThresholdSizeEnum.Half)
         {
             num2 = 2;
         }
         else if (mainThresholdSize == MainThresholdSizeEnum.Quarter)
         {
             num2 = 4;
         }
         RenderTexture tempRenderTarget = AmplifyUtils.GetTempRenderTarget(src.width / num2, src.height / num2);
         if (this.m_maskTexture == null)
         {
             Graphics.Blit(src, tempRenderTarget, this.m_bloomMaterial, 0);
         }
         else
         {
             this.m_bloomMaterial.SetTexture(AmplifyUtils.MaskTextureId, this.m_maskTexture);
             Graphics.Blit(src, tempRenderTarget, this.m_bloomMaterial, 1);
         }
         if (this.m_debugToScreen == DebugToScreenEnum.MainThreshold)
         {
             Graphics.Blit(tempRenderTarget, dest, this.m_bloomMaterial, 0x21);
             AmplifyUtils.ReleaseAllRT();
         }
         else
         {
             bool          flag   = true;
             RenderTexture source = tempRenderTarget;
             if (this.m_bloomDownsampleCount > 0)
             {
                 flag = false;
                 int width  = tempRenderTarget.width;
                 int height = tempRenderTarget.height;
                 int index  = 0;
                 while (true)
                 {
                     if (index >= this.m_bloomDownsampleCount)
                     {
                         source = this.m_tempAuxDownsampleRTs[this.m_featuresSourceId];
                         AmplifyUtils.ReleaseTempRenderTarget(tempRenderTarget);
                         break;
                     }
                     this.m_tempDownsamplesSizes[index].x = width;
                     this.m_tempDownsamplesSizes[index].y = height;
                     width  = (width + 1) >> 1;
                     height = (height + 1) >> 1;
                     this.m_tempAuxDownsampleRTs[index] = AmplifyUtils.GetTempRenderTarget(width, height);
                     if (index != 0)
                     {
                         Graphics.Blit(this.m_tempAuxDownsampleRTs[index - 1], this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 9);
                     }
                     else if (!this.m_temporalFilteringActive || (this.m_gaussianSteps[index] != 0))
                     {
                         if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic)
                         {
                             Graphics.Blit(source, this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 10);
                         }
                         else
                         {
                             Graphics.Blit(source, this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 11);
                         }
                     }
                     else
                     {
                         if ((this.m_tempFilterBuffer == null) || !this.m_temporalFilteringActive)
                         {
                             if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic)
                             {
                                 Graphics.Blit(source, this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 10);
                             }
                             else
                             {
                                 Graphics.Blit(source, this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 11);
                             }
                         }
                         else
                         {
                             float num6 = this.m_temporalFilteringCurve.Evaluate(this.m_temporalFilteringValue);
                             this.m_bloomMaterial.SetFloat(AmplifyUtils.TempFilterValueId, num6);
                             this.m_bloomMaterial.SetTexture(AmplifyUtils.AnamorphicRTS[0], this.m_tempFilterBuffer);
                             if (this.m_upscaleQuality == UpscaleQualityEnum.Realistic)
                             {
                                 Graphics.Blit(source, this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 12);
                             }
                             else
                             {
                                 Graphics.Blit(source, this.m_tempAuxDownsampleRTs[index], this.m_bloomMaterial, 13);
                             }
                         }
                         bool flag2 = false;
                         if (this.m_tempFilterBuffer == null)
                         {
                             flag2 = true;
                         }
                         else if ((this.m_tempFilterBuffer.format != this.m_tempAuxDownsampleRTs[index].format) || ((this.m_tempFilterBuffer.width != this.m_tempAuxDownsampleRTs[index].width) || (this.m_tempFilterBuffer.height != this.m_tempAuxDownsampleRTs[index].height)))
                         {
                             this.CleanTempFilterRT();
                             flag2 = true;
                         }
                         if (flag2)
                         {
                             this.CreateTempFilterRT(this.m_tempAuxDownsampleRTs[index]);
                         }
                         this.m_tempFilterBuffer.DiscardContents();
                         Graphics.Blit(this.m_tempAuxDownsampleRTs[index], this.m_tempFilterBuffer);
                         if (this.m_debugToScreen == DebugToScreenEnum.TemporalFilter)
                         {
                             Graphics.Blit(this.m_tempAuxDownsampleRTs[index], dest);
                             AmplifyUtils.ReleaseAllRT();
                             return;
                         }
                     }
                     if (this.m_gaussianSteps[index] > 0)
                     {
                         this.ApplyGaussianBlur(this.m_tempAuxDownsampleRTs[index], this.m_gaussianSteps[index], this.m_gaussianRadius[index], index == 0);
                         if (this.m_temporalFilteringActive && (this.m_debugToScreen == DebugToScreenEnum.TemporalFilter))
                         {
                             Graphics.Blit(this.m_tempAuxDownsampleRTs[index], dest);
                             AmplifyUtils.ReleaseAllRT();
                             return;
                         }
                     }
                     index++;
                 }
             }
             if (this.m_bokehFilter.ApplyBokeh && this.m_bokehFilter.ApplyOnBloomSource)
             {
                 this.m_bokehFilter.ApplyBokehFilter(source, this.m_bloomMaterial);
                 if (this.m_debugToScreen == DebugToScreenEnum.BokehFilter)
                 {
                     Graphics.Blit(source, dest);
                     AmplifyUtils.ReleaseAllRT();
                     return;
                 }
             }
             RenderTexture texture5 = null;
             bool          flag3    = false;
             if (!this.m_separateFeaturesThreshold)
             {
                 texture5 = source;
             }
             else
             {
                 this.m_bloomParams.y = this.m_featuresThreshold;
                 this.m_bloomMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams);
                 this.m_finalCompositionMaterial.SetVector(AmplifyUtils.BloomParamsId, this.m_bloomParams);
                 texture5 = AmplifyUtils.GetTempRenderTarget(source.width, source.height);
                 flag3    = true;
                 Graphics.Blit(source, texture5, this.m_bloomMaterial, 0);
                 if (this.m_debugToScreen == DebugToScreenEnum.FeaturesThreshold)
                 {
                     Graphics.Blit(texture5, dest);
                     AmplifyUtils.ReleaseAllRT();
                     return;
                 }
             }
             if (this.m_bokehFilter.ApplyBokeh && !this.m_bokehFilter.ApplyOnBloomSource)
             {
                 if (!flag3)
                 {
                     flag3    = true;
                     texture5 = AmplifyUtils.GetTempRenderTarget(source.width, source.height);
                     Graphics.Blit(source, texture5);
                 }
                 this.m_bokehFilter.ApplyBokehFilter(texture5, this.m_bloomMaterial);
                 if (this.m_debugToScreen == DebugToScreenEnum.BokehFilter)
                 {
                     Graphics.Blit(texture5, dest);
                     AmplifyUtils.ReleaseAllRT();
                     return;
                 }
             }
             if (this.m_lensFlare.ApplyLensFlare && (this.m_debugToScreen != DebugToScreenEnum.Bloom))
             {
                 renderTexture = this.m_lensFlare.ApplyFlare(this.m_bloomMaterial, texture5);
                 this.ApplyGaussianBlur(renderTexture, this.m_lensFlare.LensFlareGaussianBlurAmount, 1f, false);
                 if (this.m_debugToScreen == DebugToScreenEnum.LensFlare)
                 {
                     Graphics.Blit(renderTexture, dest);
                     AmplifyUtils.ReleaseAllRT();
                     return;
                 }
             }
             if (this.m_anamorphicGlare.ApplyLensGlare && (this.m_debugToScreen != DebugToScreenEnum.Bloom))
             {
                 texture2 = AmplifyUtils.GetTempRenderTarget(source.width, source.height);
                 this.m_anamorphicGlare.OnRenderImage(this.m_bloomMaterial, texture5, texture2, cameraRot);
                 if (this.m_debugToScreen == DebugToScreenEnum.LensGlare)
                 {
                     Graphics.Blit(texture2, dest);
                     AmplifyUtils.ReleaseAllRT();
                     return;
                 }
             }
             if (flag3)
             {
                 AmplifyUtils.ReleaseTempRenderTarget(texture5);
             }
             if (flag)
             {
                 this.ApplyGaussianBlur(source, this.m_gaussianSteps[0], this.m_gaussianRadius[0], false);
             }
             if (this.m_bloomDownsampleCount <= 0)
             {
                 this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], source);
                 this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[0], 1f);
             }
             else if (this.m_bloomDownsampleCount == 1)
             {
                 if (this.m_upscaleQuality != UpscaleQualityEnum.Realistic)
                 {
                     this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], this.m_tempAuxDownsampleRTs[0]);
                 }
                 else
                 {
                     this.ApplyUpscale();
                     this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[0], this.m_tempUpscaleRTs[0]);
                 }
                 this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[0], this.m_upscaleWeights[0]);
             }
             else if (this.m_upscaleQuality != UpscaleQualityEnum.Realistic)
             {
                 for (int i = 0; i < this.m_bloomDownsampleCount; i++)
                 {
                     int index = (this.m_bloomDownsampleCount - 1) - i;
                     this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[index], this.m_tempAuxDownsampleRTs[index]);
                     this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[index], this.m_upscaleWeights[i]);
                 }
             }
             else
             {
                 this.ApplyUpscale();
                 for (int i = 0; i < this.m_bloomDownsampleCount; i++)
                 {
                     int index = (this.m_bloomDownsampleCount - i) - 1;
                     this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.MipResultsRTS[index], this.m_tempUpscaleRTs[i]);
                     this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.UpscaleWeightsStr[index], this.m_upscaleWeights[i]);
                 }
             }
             if (this.m_debugToScreen == DebugToScreenEnum.Bloom)
             {
                 this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.SourceContributionId, 0f);
                 this.FinalComposition(0f, 1f, src, dest, 0);
             }
             else
             {
                 if (this.m_bloomDownsampleCount <= 1)
                 {
                     this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtWeightsStr[0], this.m_lensDirtWeights[0]);
                     this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensStarburstWeightsStr[0], this.m_lensStarburstWeights[0]);
                 }
                 else
                 {
                     for (int i = 0; i < this.m_bloomDownsampleCount; i++)
                     {
                         this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtWeightsStr[(this.m_bloomDownsampleCount - i) - 1], this.m_lensDirtWeights[i]);
                         this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensStarburstWeightsStr[(this.m_bloomDownsampleCount - i) - 1], this.m_lensStarburstWeights[i]);
                     }
                 }
                 if (this.m_lensFlare.ApplyLensFlare)
                 {
                     this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensFlareRTId, renderTexture);
                 }
                 if (this.m_anamorphicGlare.ApplyLensGlare)
                 {
                     this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensGlareRTId, texture2);
                 }
                 if (this.m_applyLensDirt)
                 {
                     this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensDirtRTId, this.m_lensDirtTexture);
                     this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensDirtStrengthId, this.m_lensDirtStrength * 1f);
                     if (this.m_debugToScreen == DebugToScreenEnum.LensDirt)
                     {
                         this.FinalComposition(0f, 0f, src, dest, 2);
                         return;
                     }
                 }
                 if (this.m_applyLensStardurst)
                 {
                     this.m_starburstMat[0, 0] = Mathf.Cos(cameraRot);
                     this.m_starburstMat[0, 1] = -Mathf.Sin(cameraRot);
                     this.m_starburstMat[1, 0] = Mathf.Sin(cameraRot);
                     this.m_starburstMat[1, 1] = Mathf.Cos(cameraRot);
                     this.m_finalCompositionMaterial.SetMatrix(AmplifyUtils.LensFlareStarMatrixId, this.m_starburstMat);
                     this.m_finalCompositionMaterial.SetFloat(AmplifyUtils.LensFlareStarburstStrengthId, this.m_lensStarburstStrength * 1f);
                     this.m_finalCompositionMaterial.SetTexture(AmplifyUtils.LensStarburstRTId, this.m_lensStardurstTex);
                     if (this.m_debugToScreen == DebugToScreenEnum.LensStarburst)
                     {
                         this.FinalComposition(0f, 0f, src, dest, 1);
                         return;
                     }
                 }
                 if (this.m_targetTexture == null)
                 {
                     this.FinalComposition(1f, 1f, src, dest, -1);
                 }
                 else
                 {
                     this.m_targetTexture.DiscardContents();
                     this.FinalComposition(0f, 1f, src, this.m_targetTexture, -1);
                     Graphics.Blit(src, dest);
                 }
             }
         }
     }
 }