Exemplo n.º 1
0
        public Texture2D PerformBloom(Texture2D srcTexture)
        {
            effect.Parameters["Threshold"].SetValue(Threshold);
            effect.Parameters["BloomIntensity"].SetValue(BloomIntensity);
            effect.Parameters["OriginalIntensity"].SetValue(OriginalIntensity);
            effect.Parameters["BloomSaturation"].SetValue(BloomSaturation);
            effect.Parameters["OriginalSaturation"].SetValue(OriginalSaturation);

            device.SetRenderTarget(bloomTexture);
            spriteBatch.Begin(0, BlendState.Opaque, null, null, null, effect);
            effect.CurrentTechnique = effect.Techniques["Bloom"];
            effect.CurrentTechnique.Passes[0].Apply();
            device.Clear(Color.Black);
            spriteBatch.Draw(srcTexture, Vector2.Zero, Color.White);
            spriteBatch.End();

            Texture2D blurredTexture = bloomTexture;

            if (gaussianBlur != null)
            {
                blurredTexture = gaussianBlur.PerformGaussianBlur(bloomTexture);
            }

            device.SetRenderTarget(bloomCombinedTexture);
            spriteBatch.Begin(0, BlendState.Opaque, null, null, null, effect);
            effect.CurrentTechnique = effect.Techniques["BloomCombine"];
            effect.CurrentTechnique.Passes[0].Apply();
            effect.Parameters["ColorMap"].SetValue(srcTexture);
            device.Clear(Color.Black);
            spriteBatch.Draw(blurredTexture, new Rectangle(0, 0, bloomTexture.Bounds.Width, bloomTexture.Bounds.Height), Color.White);
            spriteBatch.End();

            device.SetRenderTarget(null);

            return((Texture2D)bloomCombinedTexture);
        }