private void SetMergerStates(ShaderGraph.MetaMaterial meta) { switch (meta.blendMode) { case ShaderGraph.MetaMaterial.BlendMode.Opaque: SetDepthStencilState(DepthStencilStates.EqualAndDisableWrite); SetBlendState(BlendStates.Opaque); break; case ShaderGraph.MetaMaterial.BlendMode.Masked: SetDepthStencilState(DepthStencilStates.EqualAndDisableWrite); SetBlendState(BlendStates.AlphaEnabledBlending); break; case ShaderGraph.MetaMaterial.BlendMode.Translucent: SetDepthStencilState(DepthStencilStates.GreaterAndDisableWrite); SetBlendState(BlendStates.AlphaEnabledBlending); GetContext.PixelShader.SetShaderResource(7, null); GetContext.PixelShader.SetShaderResource(8, null); GetContext.PixelShader.SetShaderResource(9, null); GetContext.PixelShader.SetShaderResource(10, null); break; case ShaderGraph.MetaMaterial.BlendMode.Additive: break; case ShaderGraph.MetaMaterial.BlendMode.Modulate: break; default: break; } switch (meta.cullMode) { case ShaderGraph.MetaMaterial.CullMode.Front: SetRasterizerState(meta.Wireframe ? RasterizerStates.WireframeFrontCull : RasterizerStates.SolidFrontCull); break; case ShaderGraph.MetaMaterial.CullMode.Back: SetRasterizerState(meta.Wireframe ? RasterizerStates.WireframeBackCull : RasterizerStates.SolidBackCull); break; case ShaderGraph.MetaMaterial.CullMode.None: SetRasterizerState(meta.Wireframe ? RasterizerStates.WireframeNoneCull : RasterizerStates.SolidNoneCull); break; default: break; } }
//TODO: cache old meta values private void SetMergerStates(ShaderGraph.MetaMaterial meta) { switch (meta.blendMode) { case ShaderGraph.MetaMaterial.BlendMode.Opaque: if (CurrentPass == Pass.DepthPrePass) { return; } SetDepthStencilState(DepthStencilStates.EqualAndDisableWrite); SetBlendState(BlendStates.Opaque); break; case ShaderGraph.MetaMaterial.BlendMode.Masked: SetDepthStencilState(DepthStencilStates.EqualAndDisableWrite); SetBlendState(BlendStates.AlphaEnabledBlending); break; case ShaderGraph.MetaMaterial.BlendMode.Translucent: SetDepthStencilState(DepthStencilStates.GreaterAndDisableWrite); SetBlendState(BlendStates.AlphaEnabledBlending); break; case ShaderGraph.MetaMaterial.BlendMode.Additive: break; case ShaderGraph.MetaMaterial.BlendMode.Modulate: break; default: break; } switch (meta.cullMode) { case ShaderGraph.MetaMaterial.CullMode.Front: SetRasterizerState(meta.Wireframe ? RasterizerStates.WireframeFrontCull : RasterizerStates.SolidFrontCull); break; case ShaderGraph.MetaMaterial.CullMode.Back: SetRasterizerState(meta.Wireframe ? RasterizerStates.WireframeBackCull : RasterizerStates.SolidBackCull); break; case ShaderGraph.MetaMaterial.CullMode.None: SetRasterizerState(meta.Wireframe ? RasterizerStates.WireframeNoneCull : RasterizerStates.SolidNoneCull); break; default: break; } }
public Material(ShaderGraph.MetaMaterial meta) { MetaMaterial = meta; PropetyBlock = new MaterialPropetyBlock(); }