/// <summary> /// Helper for drawing a texture into the current rendertarget, /// using a custom shader to apply postprocessing effects. /// </summary> void DrawFullscreenQuad(GraphicsDevice graphicsDevice, Texture2D texture, int width, int height, PixelShader pixelShader, IntermediateBuffer currentBuffer) { // If the user has selected one of the show intermediate buffer options, // we still draw the quad to make sure the image will end up on the screen, // but might need to skip applying the custom pixel shader. if (showBuffer < currentBuffer) { pixelShader = null; } spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque); if (pixelShader != null) { graphicsDevice.SetPixelShader(pixelShader); } spriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White); spriteBatch.End(); // TODO SL bug: this state reset should not be needed! graphicsDevice.Textures[0] = null; graphicsDevice.Textures[1] = null; }
public void DrawFullScreenQuadRender(Texture2D texture, RenderTarget2D renderTarget, Effect effect, IntermediateBuffer currentBuffer) { GraphDev.SetRenderTarget(renderTarget); DrawFullScreenQuadRender(texture, renderTarget.Width, renderTarget.Height, effect, currentBuffer); }
public void Process(RenderTarget2D scene, IntermediateBuffer show = IntermediateBuffer.Result) { device.SetRenderTarget(scene); device.SamplerStates[1] = SamplerState.LinearClamp; bloomExtract.Parameters["BloomThreshold"].SetValue(0.25F); RenderQuad(scene, primary, bloomExtract, IntermediateBuffer.PreBloom); SetBlurParameters(0, 1.0f / (float)primary.Width); RenderQuad(primary, secondary, blurGaussian, IntermediateBuffer.BlurHorizontal); SetBlurParameters(0, 1.0f / (float)primary.Height); RenderQuad(secondary, primary, blurGaussian, IntermediateBuffer.BlurAll); device.SetRenderTarget(null); var parameters = bloomCombine.Parameters; parameters["BloomIntensity"].SetValue(1.25F); parameters["BaseIntensity"].SetValue(1.0F); parameters["BloomSaturation"].SetValue(1.0F); parameters["BaseSaturation"].SetValue(1.0F); device.Textures[1] = scene; var view = device.Viewport; RenderQuad(primary, view.Width, view.Height, bloomCombine, IntermediateBuffer.Result); }
/// <summary> /// Helper for drawing a texture into the current rendertarget, /// using a custom shader to apply postprocessing effects. /// </summary> void DrawFullscreenQuad(Texture2D texture, int width, int height, Effect effect, IntermediateBuffer currentBuffer) { spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque); // Begin the custom effect, if it is currently enabled. If the user // has selected one of the show intermediate buffer options, we still // draw the quad to make sure the image will end up on the screen, // but might need to skip applying the custom pixel shader. if (showBuffer >= currentBuffer) { //effect.Begin(); effect.CurrentTechnique.Passes[0].Apply(); } // Changing this to 1 fixed the reach complaint about clamping the texture. The wonders of XNA. GraphicsDevice.SamplerStates[1] = SamplerState.PointClamp; // Draw the quad. spriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White); spriteBatch.End(); // End the custom effect. if (showBuffer >= currentBuffer) { //effect.CurrentTechnique.Passes[0].End(); //effect.End(); } }
/// <summary> /// Helper for drawing a texture into the current rendertarget, /// using a custom shader to apply postprocessing effects. /// </summary> void DrawFullscreenQuad(Texture2D texture, int width, int height, Effect effect, IntermediateBuffer currentBuffer) { spriteBatch.Begin(SpriteBlendMode.None, SpriteSortMode.Immediate, SaveStateMode.None); game.Renderer.SetDefaultRenderStates(); // Begin the custom effect, if it is currently enabled. If the user // has selected one of the show intermediate buffer options, we still // draw the quad to make sure the image will end up on the screen, // but might need to skip applying the custom pixel shader. if (showBuffer >= currentBuffer) { effect.Begin(); effect.CurrentTechnique.Passes[0].Begin(); } // Draw the quad. spriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White); spriteBatch.End(); // End the custom effect. if (showBuffer >= currentBuffer) { effect.CurrentTechnique.Passes[0].End(); effect.End(); } }
/// <summary> /// Helper for drawing a texture into the current rendertarget, /// using a custom shader to apply postprocessing effects. /// </summary> private void DrawFullscreenQuad(Texture2D texture, int width, int height, Effect effect, IntermediateBuffer currentBuffer) { // If the user has selected one of the show intermediate buffer options, // we still draw the quad to make sure the image will end up on the screen, // but might need to skip applying the custom pixel shader. if (showBuffer < currentBuffer) { effect = null; } try { DwarfGame.SafeSpriteBatchBegin(0, BlendState.Opaque, null, null, null, effect, Matrix.Identity); DwarfGame.SpriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White); } catch (InvalidOperationException operationException) { Console.Error.WriteLine(operationException.ToString()); } finally { DwarfGame.SpriteBatch.End(); } }
void SetBloomEffectParameters(float dx, float dy, float theta, IntermediateBuffer BlurDirection, int sampleCount) { // Create temporary arrays for computing our filter settings. float[] sampleWeights = new float[sampleCount]; Vector2[] sampleOffsets = new Vector2[sampleCount]; // The first sample always has a zero offset. sampleWeights[0] = ComputeBloomGaussian(0, theta); sampleOffsets[0] = new Vector2(0); // Maintain a sum of all the weighting values. float totalWeights = sampleWeights[0]; // Add pairs of additional sample taps, positioned // along a line in both directions from the center. for (int i = 0; i < sampleCount / 2; i++) { // Store weights for the positive and negative taps. float weight = ComputeBloomGaussian(i + 1, theta); sampleWeights[i * 2 + 1] = weight; sampleWeights[i * 2 + 2] = weight; totalWeights += weight * 2; // To get the maximum amount of blurring from a limited number of // pixel shader samples, we take advantage of the bilinear filtering // hardware inside the texture fetch unit. If we position our texture // coordinates exactly halfway between two texels, the filtering unit // will average them for us, giving two samples for the price of one. // This allows us to step in units of two texels per sample, rather // than just one at a time. The 1.5 offset kicks things off by // positioning us nicely in between two texels. float sampleOffset = i * 2 + 1.5f; Vector2 delta = new Vector2(dx, dy) * sampleOffset; // Store texture coordinate offsets for the positive and negative taps. sampleOffsets[i * 2 + 1] = delta; sampleOffsets[i * 2 + 2] = -delta; } // Normalize the list of sample weightings, so they will always sum to one. for (int i = 0; i < sampleWeights.Length; i++) { sampleWeights[i] /= totalWeights; } // Tell the effect about our new filter settings. if (BlurDirection == IntermediateBuffer.BlurredHorizontally) { sampleWeightsX = sampleWeights; sampleOffsetsX = sampleOffsets; } else { sampleWeightsY = sampleWeights; sampleOffsetsY = sampleOffsets; } }
public BloomRenderComponent(Game game) : base(game) { this.GraphDev = game.GraphicsDevice; this.Content = game.Content; this.SColor = Color.Gray; this.Settings = BloomParams.BModes[BloomStates.SOFT]; this.IBuffer = IntermediateBuffer.Final; }
protected void DrawFullscreenQuad(Texture2D texture, RenderTarget2D renderTarget, Effect effect, IntermediateBuffer currentBuffer) { GraphicsDevice.SetRenderTarget(renderTarget); DrawFullscreenQuad(texture,renderTarget.Width, renderTarget.Height, effect, currentBuffer); }
protected void DrawFullscreenQuad(Texture2D texture, RenderTarget2D renderTarget, Effect effect, IntermediateBuffer currentBuffer) { GraphicsDevice.SetRenderTarget(renderTarget); DrawFullscreenQuad(texture, renderTarget.Width, renderTarget.Height, effect, currentBuffer); }
/// <summary> /// Helper for drawing a texture into a rendertarget, using /// a custom shader to apply postprocessing effects. /// </summary> public void DrawRenderTargetIntoOther(vxEngine vxEngine, Texture2D texture, RenderTarget2D renderTarget, Effect effect, IntermediateBuffer currentBuffer) { Engine.GraphicsDevice.SetRenderTarget(renderTarget); DrawFullscreenQuad(texture, renderTarget.Width, renderTarget.Height, effect); }
/// <summary> /// Helper for drawing a texture into a rendertarget, using /// a custom shader to apply postprocessing effects. /// </summary> private void DrawFullscreenQuad(SpriteBatch spriteBatch, Texture2D texture, RenderTarget2D renderTarget, Effect effect, IntermediateBuffer currentBuffer) { spriteBatch.GraphicsDevice.SetRenderTarget(renderTarget); DrawFullscreenQuad(spriteBatch, texture, renderTarget.Width, renderTarget.Height, effect, currentBuffer); }
/// <summary> /// Helper for drawing a texture into a rendertarget, using /// a custom shader to apply postprocessing effects. /// </summary> void DrawFullscreenQuad(GraphicsDevice graphicsDevice, Texture2D texture, RenderTarget2D renderTarget, PixelShader pixelShader, IntermediateBuffer currentBuffer) { graphicsDevice.SetRenderTarget(renderTarget); DrawFullscreenQuad(graphicsDevice, texture, renderTarget.Width, renderTarget.Height, pixelShader, currentBuffer); }
protected void DrawFullscreenQuad(Texture2D texture, int width, int height, Effect effect, IntermediateBuffer currentBuffer) { // If the user has selected one of the show intermediate buffer options, // we still draw the quad to make sure the image will end up on the screen, // but might need to skip applying the custom pixel shader. if (showBuffer < currentBuffer) { effect = null; } m_SpriteBatch.Begin(0, BlendState.Opaque, null, null, null, effect); m_SpriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White); m_SpriteBatch.End(); }
/// <summary> /// Helper for drawing a texture into the current rendertarget, /// using a custom shader to apply postprocessing effects. /// </summary> private void DrawFullscreenQuadFinal(SpriteBatch spriteBatch, Texture2D texture, int width, int height, Effect effect, IntermediateBuffer currentBuffer) { // If the user has selected one of the show intermediate buffer options, // we still draw the quad to make sure the image will end up on the screen, // but might need to skip applying the custom pixel shader. if (showBuffer < currentBuffer) { effect = null; } spriteBatch.Begin(0, BlendState.AlphaBlend, null, null, null, effect); spriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White); spriteBatch.End(); }
void DrawFullScreenQuadRender(Texture2D texture, int width, int height, Effect effect, IntermediateBuffer currentBuffer) { // for intermidiate buffer options, still draw if (IBuffer < currentBuffer) { effect = null; } Batcher.Begin(SpriteSortMode.Deferred, BlendState.Opaque, null, null, null, effect); Batcher.Draw(texture, new Rectangle(0, 0, width, height), Color.White); Batcher.End(); }
/// <summary> /// Helper for drawing a texture into the current rendertarget, /// using a custom shader to apply postprocessing effects. /// </summary> void DrawFullscreenQuad(Texture2D texture, int width, int height, Effect effect, IntermediateBuffer currentBuffer) { // If the user has selected one of the show intermediate buffer options, // we still draw the quad to make sure the image will end up on the screen, // but might need to skip applying the custom pixel shader. if (_showBuffer < currentBuffer) { effect = null; } // Must do this for each target if using transparent target _graphicsDevice.Clear(Color.TransparentBlack); _spriteBatch.Begin(0, BlendState.Opaque, null, null, null, effect); _spriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White); _spriteBatch.End(); }
private void DrawFullscreenQuad( IRenderTarget2D textureToDraw, int width, int height, EffectInstance effect, IntermediateBuffer currentBuffer, BlendMode blendState = BlendMode.AlphaBlendPremultiplied) { if (DisplayedBuffer < currentBuffer) { // The user has selected one of the show intermediate buffer options, // we still draw the quad to make sure the image will end up on the screen, // but might need to skip applying the custom pixel shader. effect = null; } // Clear with transparent black. Must do this for each target if using transparent target. this.device.Clear(Color.FromArgb(255, 0, 0, 0)); this.device.DrawTexture(textureToDraw, width, height, effect, blendState); }
/// <summary> /// Helper for drawing a texture into the current rendertarget, /// using a custom shader to apply postprocessing effects. /// </summary> void DrawFullscreenQuad(Texture2D texture, int width, int height, Effect effect, IntermediateBuffer currentBuffer) { spriteBatch.Begin(0, BlendState.Opaque, null, null, null, effect); // Begin the custom effect, if it is currently enabled. If the user // has selected one of the show intermediate buffer options, we still // draw the quad to make sure the image will end up on the screen, // but might need to skip applying the custom pixel shader. if (showBuffer >= currentBuffer) { effect.CurrentTechnique.Passes[0].Apply(); } // Draw the quad. spriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White); spriteBatch.End(); // End the custom effect. if (showBuffer >= currentBuffer) { } }
/// <summary> /// Helper for drawing a texture into the current rendertarget, /// using a custom shader to apply postprocessing effects. /// </summary> private void DrawFullscreenQuad(Texture2D texture, int width, int height, Effect effect, IntermediateBuffer currentBuffer) { // If the user has selected one of the show intermediate buffer options, // we still draw the quad to make sure the image will end up on the screen, // but might need to skip applying the custom pixel shader. if(showBuffer < currentBuffer) { effect = null; } try { spriteBatch.Begin(0, BlendState.Opaque, null, null, null, effect); spriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White); spriteBatch.End(); } catch (InvalidOperationException operationException) { Console.Error.WriteLine(operationException.Message); } }
private void DrawQuad(Texture2D texture, int Width, int Height, string Technique, IntermediateBuffer currentBuffer) { // if the user has selected one of the show intermediate buffer options, we still draw the quad to make sure the image will end up on the screen, // but might need to skip applying the custom pixel shader. if (IntermediateBuffer.FinalResult < currentBuffer) CProgram.gQ2Game.gEffect = null; else CProgram.gQ2Game.gEffect.CurrentTechnique = CProgram.gQ2Game.gEffect.Techniques[Technique]; spriteBatch.Begin(0, BlendState.Opaque, null, null, null, CProgram.gQ2Game.gEffect); spriteBatch.Draw(texture, new Rectangle(0, 0, Width, Height), Color.White); spriteBatch.End(); }
/// <summary> /// Helper for drawing a texture into the current rendertarget, /// using a custom shader to apply postprocessing effects. /// </summary> void DrawFullscreenQuad(Texture2D texture, int width, int height, Effect effect, IntermediateBuffer currentBuffer) { spriteBatch.Begin(SpriteBlendMode.None, SpriteSortMode.Immediate, SaveStateMode.SaveState); // Begin the custom effect, if it is currently enabled. If the user // has selected one of the show intermediate buffer options, we still // draw the quad to make sure the image will end up on the screen, // but might need to skip applying the custom pixel shader. if (showBuffer >= currentBuffer) { effect.Begin(); effect.CurrentTechnique.Passes[0].Begin(); } // Draw the quad. spriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White); spriteBatch.End(); // End the custom effect. if (showBuffer >= currentBuffer) { effect.CurrentTechnique.Passes[0].End(); effect.End(); } }
private void DrawQuad(Texture2D texture, RenderTarget2D RenderTarget, string Technique, IntermediateBuffer currentBuffer) { CProgram.gQ2Game.gGraphicsDevice.SetRenderTarget(RenderTarget); DrawQuad(texture, RenderTarget.Width, RenderTarget.Height, Technique, currentBuffer); CProgram.gQ2Game.gGraphicsDevice.SetRenderTarget(null); }
private void DrawQuad(Texture2D texture, int Width, int Height, string Technique, IntermediateBuffer currentBuffer) { // if the user has selected one of the show intermediate buffer options, we still draw the quad to make sure the image will end up on the screen, // but might need to skip applying the custom pixel shader. if (IntermediateBuffer.FinalResult < currentBuffer) { CProgram.gQ2Game.gEffect = null; } else { CProgram.gQ2Game.gEffect.CurrentTechnique = CProgram.gQ2Game.gEffect.Techniques[Technique]; } spriteBatch.Begin(0, BlendState.Opaque, null, null, null, CProgram.gQ2Game.gEffect); spriteBatch.Draw(texture, new Rectangle(0, 0, Width, Height), Color.White); spriteBatch.End(); }
private void DrawFullscreenQuad(Texture2D texture, int width, int height, Effect effect, IntermediateBuffer currentBuffer) { if (showBuffer < currentBuffer) { effect = null; } spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Opaque, null, null, null, effect); spriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White); spriteBatch.End(); }
private void RenderQuad(Texture2D texture, int width, int height, Effect effect, IntermediateBuffer current) { if (ShowBuffer < current) effect = null; batch.Begin(0, BlendState.Opaque, null, null, null, effect); batch.Draw(texture, new Rectangle(0, 0, width, height), Color.White); batch.End(); }
private void RenderQuad(Texture2D texture, RenderTarget2D target, Effect effect, IntermediateBuffer current) { device.SetRenderTarget(target); RenderQuad(texture, target.Width, target.Height, effect, current); }
private void DrawFullscreenQuad(Texture2D texture, int width, int height, Effect effect, IntermediateBuffer currentBuffer) { if (showBuffer < currentBuffer) { effect = null; } spriteBatch.Begin(0, BlendState.Opaque, null, null, null, effect); spriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White); spriteBatch.End(); }
private void DrawFullScreenQuad(Texture2D tex, RenderTarget2D target, Effect effect, IntermediateBuffer buffer) { GraphicsDevice.SetRenderTarget(target); DrawFullscreenQuad(tex, target.Width, target.Height, effect, buffer); }