Esempio n. 1
0
        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
            };
        }
Esempio n. 2
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);
 }
Esempio n. 3
0
        public static uint FlagForTintEffectMode(TintEffectMode tintEffectMode)
        {
            switch (tintEffectMode)
            {
            case TintEffectMode.Additive: return(AdditiveBlendMask);

            case TintEffectMode.Opaque: return(OpaqueBlendMask);

            default: return(0);
            }
        }
Esempio n. 4
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));
            }
        }
Esempio n. 5
0
        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 };
        }
Esempio n. 6
0
        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
        }
Esempio n. 7
0
        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;
            }
        }
Esempio n. 8
0
 private BlendState(FixedBlendState fixedBlendState, TintEffectMode mode, string name)
 {
     this.fixedBlendState = fixedBlendState;
     this.tintEffectMode = mode;
     this.Name = name;
 }
Esempio n. 9
0
 private BlendState(FixedBlendState fixedBlendState, TintEffectMode mode, string name)
 {
     this.fixedBlendState = fixedBlendState;
     this.tintEffectMode  = mode;
     this.Name            = name;
 }
Esempio n. 10
0
        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
        }