public TintEffect(TintEffectMode mode) { this.mode = mode; string url; switch (mode) { default: case TintEffectMode.Normal: url = @"/ExEnSilver;component/Effects/Tint.ps"; break; case TintEffectMode.Additive: url = @"/ExEnSilver;component/Effects/AdditiveTint.ps"; break; case TintEffectMode.Opaque: url = @"/ExEnSilver;component/Effects/OpaqueTint.ps"; break; } Uri u = new Uri(url, UriKind.Relative); PixelShader = new PixelShader() { UriSource = u }; }
public static TintEffect Create(TintEffectMode mode) { Stack<TintEffect> pool = pools[(int)mode]; if(pool.Count > 0) return pool.Pop(); else return new TintEffect(mode); }
public static uint FlagForTintEffectMode(TintEffectMode tintEffectMode) { switch (tintEffectMode) { case TintEffectMode.Additive: return(AdditiveBlendMask); case TintEffectMode.Opaque: return(OpaqueBlendMask); default: return(0); } }
public static TintEffect Create(TintEffectMode mode) { Stack <TintEffect> pool = pools[(int)mode]; if (pool.Count > 0) { return(pool.Pop()); } else { return(new TintEffect(mode)); } }
public TintEffect(TintEffectMode mode) { this.mode = mode; string url; switch(mode) { default: case TintEffectMode.Normal: url = @"/ExEnSilver;component/Effects/Tint.ps"; break; case TintEffectMode.Additive: url = @"/ExEnSilver;component/Effects/AdditiveTint.ps"; break; case TintEffectMode.Opaque: url = @"/ExEnSilver;component/Effects/OpaqueTint.ps"; break; } Uri u = new Uri(url, UriKind.Relative); PixelShader = new PixelShader() { UriSource = u }; }
public void Begin(SpriteSortMode sortMode, BlendState blendState, SamplerState samplerState, DepthStencilState depthStencilState, RasterizerState rasterizerState, Effect effect, Matrix transformMatrix) { if (blendState != null) { fixedBlendState = blendState.fixedBlendState; tintEffectMode = blendState.tintEffectMode; } else { fixedBlendState = FixedBlendState.AlphaBlend; tintEffectMode = TintEffectMode.Normal; } Debug.Assert(samplerState == null); Debug.Assert(depthStencilState == null); Debug.Assert(rasterizerState == null); if (effect != null) { throw new NotSupportedException("Effect on SpriteBatch is not supported by ExEnSilver"); } currentMatrix = transformMatrix; #region Matrix Check // Sprite.Transform assumes that the matrix is affine, check that: Debug.Assert(transformMatrix.M13 == 0f); Debug.Assert(transformMatrix.M14 == 0f); Debug.Assert(transformMatrix.M23 == 0f); Debug.Assert(transformMatrix.M23 == 0f); Debug.Assert(transformMatrix.M31 == 0f); Debug.Assert(transformMatrix.M32 == 0f); Debug.Assert(transformMatrix.M33 == 1f); Debug.Assert(transformMatrix.M34 == 0f); Debug.Assert(transformMatrix.M43 == 0f); Debug.Assert(transformMatrix.M44 == 1f); #endregion }
public ImageSourceId(byte r, byte g, byte b, Rectangle?sourceRectangle, TintEffectMode tintEffectMode, bool cache, bool dynamicColor, bool dynamicRectangle) { if (dynamicColor) { r = g = b = 255; // Dynamic color sources are always white (although can still be additive or not) } this.colorAndFlags = ((uint)r << 8) | ((uint)g << 16) | ((uint)b << 24) | FlagForTintEffectMode(tintEffectMode) | (cache ? CacheMask : 0) | (dynamicColor ? DynamicColorMask : 0) | (dynamicRectangle ? DynamicRectangleMask : 0); if (sourceRectangle.HasValue && !dynamicRectangle) { sourceOrigin = PackPoint(sourceRectangle.Value.X, sourceRectangle.Value.Y); sourceSize = PackPoint(sourceRectangle.Value.Width, sourceRectangle.Value.Height); } else { sourceOrigin = 0; sourceSize = 0; } }
private BlendState(FixedBlendState fixedBlendState, TintEffectMode mode, string name) { this.fixedBlendState = fixedBlendState; this.tintEffectMode = mode; this.Name = name; }
public void Begin(SpriteSortMode sortMode, BlendState blendState, SamplerState samplerState, DepthStencilState depthStencilState, RasterizerState rasterizerState, Effect effect, Matrix transformMatrix) { if(blendState != null) { fixedBlendState = blendState.fixedBlendState; tintEffectMode = blendState.tintEffectMode; } else { fixedBlendState = FixedBlendState.AlphaBlend; tintEffectMode = TintEffectMode.Normal; } Debug.Assert(samplerState == null); Debug.Assert(depthStencilState == null); Debug.Assert(rasterizerState == null); if(effect != null) throw new NotSupportedException("Effect on SpriteBatch is not supported by ExEnSilver"); currentMatrix = transformMatrix; #region Matrix Check // Sprite.Transform assumes that the matrix is affine, check that: Debug.Assert(transformMatrix.M13 == 0f); Debug.Assert(transformMatrix.M14 == 0f); Debug.Assert(transformMatrix.M23 == 0f); Debug.Assert(transformMatrix.M23 == 0f); Debug.Assert(transformMatrix.M31 == 0f); Debug.Assert(transformMatrix.M32 == 0f); Debug.Assert(transformMatrix.M33 == 1f); Debug.Assert(transformMatrix.M34 == 0f); Debug.Assert(transformMatrix.M43 == 0f); Debug.Assert(transformMatrix.M44 == 1f); #endregion }