@willmotil wrote:
// game1 DX desktop project.
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; namespace HowToPixelShaderWithSpriteBatch { public class Game1 : Game { GraphicsDeviceManager graphics; SpriteBatch spriteBatch; Texture2D texture; Effect effect; float percent = 1.0f; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void Initialize() { base.Initialize(); } protected override void LoadContent() { spriteBatch = new SpriteBatch(GraphicsDevice); texture = Content.Load < Texture2D >("rabbit"); effect = Content.Load<Effect>("ShaderForSpriteBatch"); effect.CurrentTechnique = effect.Techniques["BasicColorDrawing"]; } protected override void UnloadContent() { } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); if (Keyboard.GetState().IsKeyDown(Keys.Space)) { percent -= .01f; if (percent <= 0) percent = 1.0f; } effect.Parameters["percent"].SetValue(percent); base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(SpriteSortMode.Immediate, null, null, null, null, effect, null); spriteBatch.Draw(texture, new Rectangle(0, 0, 300, 300), Color.White); spriteBatch.End(); base.Draw(gameTime); } } }
// a basic pixel shader
#if OPENGL #define SV_POSITION POSITION #define VS_SHADERMODEL vs_3_0 #define PS_SHADERMODEL ps_3_0 #else #define VS_SHADERMODEL vs_4_0_level_9_1 #define PS_SHADERMODEL ps_4_0_level_9_1 #endif float percent; sampler2D TextureSampler : register(s0) { Texture = (Texture); }; float4 MainPS(float4 position : SV_Position, float4 color : COLOR0, float2 TextureCoordinates : TEXCOORD0) : COLOR0 { float4 col = tex2D(TextureSampler, TextureCoordinates)* color; col.rgb = (col.r + col.g + col.b) / 3.0f * percent; // grey scale and darken return col; } technique BasicColorDrawing { pass P0 { PixelShader = compile PS_SHADERMODEL MainPS(); } };
Posts: 1
Participants: 1