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; }
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)); }