Пример #1
0
        void SaveState(Technique technique)
        {
            PreferredRasterizerState   preferredRasterizerState   = technique.Mapping.Key.RasterizerState;
            PreferredBlendState        preferredBlendState        = technique.Mapping.Key.BlendState;
            PreferredDepthStencilState preferredDepthStencilState = technique.Mapping.Key.DepthStencilState;

            if (CheckRasterizerState(technique))
            {
                AddNewCommand(new RasterizerStateChangeCommand(services, device.RasterizerStates[preferredRasterizerState.ToString()]));
            }

            if (CheckBlendState(technique))
            {
                AddNewCommand(new BlendStateChangeCommand(services, device.BlendStates[preferredBlendState.ToString()]));
            }

            if (CheckDepthStencilState(technique))
            {
                AddNewCommand(new DepthStencilStateChangeCommand(services, device.DepthStencilStates[preferredDepthStencilState.ToString()]));
            }

            rasterizerState   = preferredRasterizerState;
            blendState        = preferredBlendState;
            depthStencilState = preferredDepthStencilState;
        }
Пример #2
0
 public TechniqueKey(VertexShaderFlags vs = VertexShaderFlags.None, PixelShaderFlags ps = PixelShaderFlags.None, ShaderModel sm = ShaderModel.SM_4_0_Level_9_1,
                     PreferredRasterizerState rasterizerState = PreferredRasterizerState.CullBack, PreferredBlendState blendState = PreferredBlendState.Opaque, PreferredDepthStencilState depthStencilState = PreferredDepthStencilState.Enabled)
     : this()
 {
     VertexShader      = vs;
     PixelShader       = ps;
     ShaderModel       = sm;
     RasterizerState   = rasterizerState;
     BlendState        = blendState;
     DepthStencilState = depthStencilState;
 }
        static TechniqueKey GenerateKey(IEnumerable <ShaderAttributeViewModel> data, ShaderModel selectedShaderModel,
                                        PreferredRasterizerState rasterizerState, PreferredBlendState blendState, PreferredDepthStencilState depthStencilState)
        {
            Contract.Requires <ArgumentNullException>(data != null);
            VertexShaderFlags vsFlags = Graphics.Effects.VertexShaderFlags.None;
            PixelShaderFlags  psFlags = Graphics.Effects.PixelShaderFlags.None;

            foreach (var flagVM in data)
            {
                switch (flagVM.Type)
                {
                case ShaderType.Vertex:
                    vsFlags |= (VertexShaderFlags)Enum.Parse(typeof(VertexShaderFlags), flagVM.Name);
                    break;

                case ShaderType.Pixel:
                    psFlags |= (PixelShaderFlags)Enum.Parse(typeof(PixelShaderFlags), flagVM.Name);
                    break;
                }
            }

            return(new TechniqueKey(vsFlags, psFlags, selectedShaderModel, rasterizerState, blendState, depthStencilState));
        }