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;
            }
        }
示例#3
0
 public Material(ShaderGraph.MetaMaterial meta)
 {
     MetaMaterial = meta;
     PropetyBlock = new MaterialPropetyBlock();
 }