S&box Wiki

Revision Difference

Shader_States#561541

<cat>Material.ShaderReference</cat> <title>Shader States</title> # Render States Render states are set within the actual shader stages themselves. They are set by using the preprocessor definition `RenderState( Name, Argument );` and you can set as many states as you like. Every state is optional and if the render state is not set it will be set to a default value. Please refer to the list below for the types of render states you can set. ## RenderState( Name, Argument ); | Name | Valid Arguments | |------|-----------------| | FillMode | `WIREFRAME`, `SOLID` | | CullMode | `NONE`, `BACK`, `FRONT` | | DepthBias | `true`, `false` | | DepthBiasClamp | `true`, `false` | | SlopeScaleDepthBias | `true`, `false` | | DepthClipEnable | `true`, `false` | | MultisampleEnable | `true`, `false` | | SampleMask | `true`, `false` | | DepthEnable | `true`, `false` | | DepthWriteEnable | `true`, `false` | | DepthFunc | `NEVER`, `LESS`, `EQUAL`, `LESS_EQUAL`, `GREATER`, `NOT_EQUAL`, `GREATER_EQUAL`, `ALWAYS` | | StencilEnable | `true`, `false` | | StencilReadMask | A value from 0 -> 255 | | StencilWriteMask | A value from 0 -> 255 | | StencilFailOp | `KEEP`, `ZERO`, `REPLACE`, `INCR_SAT`, `DECR_SAT`, `INVERT`, `INCR`, `DECR` | | StencilDepthFailOp | `KEEP`, `ZERO`, `REPLACE`, `INCR_SAT`, `DECR_SAT`, `INVERT`, `INCR`, `DECR` | | StencilPassOp | `KEEP`, `ZERO`, `REPLACE`, `INCR_SAT`, `DECR_SAT`, `INVERT`, `INCR`, `DECR` | | StencilFunc | `NEVER`, `LESS`, `EQUAL`, `LESS_EQUAL`, `GREATER`, `NOT_EQUAL`, `GREATER_EQUAL`, `ALWAYS` | | BackStencilFailOp | `KEEP`, `ZERO`, `REPLACE`, `INCR_SAT`, `DECR_SAT`, `INVERT`, `INCR`, `DECR` | | BackStencilDepthFailOp | `KEEP`, `ZERO`, `REPLACE`, `INCR_SAT`, `DECR_SAT`, `INVERT`, `INCR`, `DECR` | | BackStencilPassOp | `KEEP`, `ZERO`, `REPLACE`, `INCR_SAT`, `DECR_SAT`, `INVERT`, `INCR`, `DECR` | | BackStencilFunc | `NEVER`, `LESS`, `EQUAL`, `LESS_EQUAL`, `GREATER`, `NOT_EQUAL`, `GREATER_EQUAL`, `ALWAYS` | | StencilRef | A value from 0 -> 255 | | AlphaToCoverageEnable | `true`, `false` | | BlendEnable | `true`, `false` | | IndependentBlendEnable | `true`, `false` | | SrcBlend | `ZERO`, `ONE`, `SRC_COLOR`, `INV_SRC_COLOR`, `SRC_ALPHA`, `INV_SRC_ALPHA`, `DEST_ALPHA`, `INV_DEST_ALPHA`, `DEST_COLOR`, `INV_DEST_COLOR`, `SRC_ALPHA_SAT`, `BLEND_FACTOR`, `SRC1_COLOR`, `INV_SRC1_COLOR`, `SRC1_ALPHA`, `INV_SRC1_ALPHA` | | DstBlend | `ZERO`, `ONE`, `SRC_COLOR`, `INV_SRC_COLOR`, `SRC_ALPHA`, `INV_SRC_ALPHA`, `DEST_ALPHA`, `INV_DEST_ALPHA`, `DEST_COLOR`, `INV_DEST_COLOR`, `SRC_ALPHA_SAT`, `BLEND_FACTOR`, `SRC1_COLOR`, `INV_SRC1_COLOR`, `SRC1_ALPHA`, `INV_SRC1_ALPHA` | | BlendOp | `ADD`, `SUBTRACT`, `REV_SUBTRACT`, `MIN`, `MAX` | | SrcBlendAlpha | `ZERO`, `ONE`, `SRC_COLOR`, `INV_SRC_COLOR`, `SRC_ALPHA`, `INV_SRC_ALPHA`, `DEST_ALPHA`, `INV_DEST_ALPHA`, `DEST_COLOR`, `INV_DEST_COLOR`, `SRC_ALPHA_SAT`, `BLEND_FACTOR`, `SRC1_COLOR`, `INV_SRC1_COLOR`, `SRC1_ALPHA`, `INV_SRC1_ALPHA` | | DstBlendAlpha | `ZERO`, `ONE`, `SRC_COLOR`, `INV_SRC_COLOR`, `SRC_ALPHA`, `INV_SRC_ALPHA`, `DEST_ALPHA`, `INV_DEST_ALPHA`, `DEST_COLOR`, `INV_DEST_COLOR`, `SRC_ALPHA_SAT`, `BLEND_FACTOR`, `SRC1_COLOR`, `INV_SRC1_COLOR`, `SRC1_ALPHA`, `INV_SRC1_ALPHA` | | BlendOpAlpha | `ADD`, `SUBTRACT`, `REV_SUBTRACT`, `MIN`, `MAX` | | ColorWriteEnable0 | `false`, `R`, `G`, `B`, `A`, `RG`, `RB`, `RA`, `GB`, `GA`, `BA`, `GBA`, `RBA`, `RGA`, `RGB`, `RGBA` | | ColorWriteEnable1 | `false`, `R`, `G`, `B`, `A`, `RG`, `RB`, `RA`, `GB`, `GA`, `BA`, `GBA`, `RBA`, `RGA`, `RGB`, `RGBA` | | ColorWriteEnable2 | `false`, `R`, `G`, `B`, `A`, `RG`, `RB`, `RA`, `GB`, `GA`, `BA`, `GBA`, `RBA`, `RGA`, `RGB`, `RGBA` | | ColorWriteEnable3 | `false`, `R`, `G`, `B`, `A`, `RG`, `RB`, `RA`, `GB`, `GA`, `BA`, `GBA`, `RBA`, `RGA`, `RGB`, `RGBA` | | SrgbWriteEnable0 | `true`, `false` | | SrgbWriteEnable1 | `true`, `false` | | SrgbWriteEnable2 | `true`, `false` | | SrgbWriteEnable3 | `true`, `false` | | BlendFactor | `true`, `false` | | HighPrecisionBlendEnable | `true`, `false` | | AlphaTestEnable | `true`, `false` | | AlphaTestRef | `true`, `false` | | AlphaTestFunc | `NEVER`, `LESS`, `EQUAL`, `LESS_EQUAL`, `GREATER`, `NOT_EQUAL`, `GREATER_EQUAL`, `ALWAYS` | ## Example usage ``` PS { #include "common/pixel.hlsl" RenderState( DepthEnable, false ); // Disable depth testing RenderState( DepthWriteEnable, false ); // Don't write to the depth buffer RenderState( DepthFunc, LESS_EQUAL ); // Set depth function, not needed! RenderState( FillMode, WIREFRAME ); // Render the wireframe of the model // // Main // float4 MainPs( PixelInput i ) : SV_Target0 { Material m = GatherMaterial( i ); /* m.Metalness = 1.3f; // Forces the object to be metalic */ return FinalizePixelMaterial( i, m ); } } ``` ⤶ ⤶ # Sampler States⤶ ⤶ Sampler states dictate how you "sample" your texture. This can range from specifying how the value should wrap around the texture to what kind of filtering is used on the texture and which comparison function should be selected. Sampler states are NOT REQUIRED to be set and are OPTIONAL!⤶ ⤶ ## Filter( MODE );⤶ ⤶ | Filter Modes |⤶ | ------------ |⤶ | ANISO |⤶ | BILINEAR |⤶ | TRILINEAR |⤶ | POINT |⤶ | NEAREST | ⤶ | ANISOTROPIC |⤶ | USER_CONFIG |⤶ | MIN_MAG_MIP_POINT |⤶ | MIN_MAG_POINT_MIP_LINEAR |⤶ | MIN_POINT_MAG_LINEAR_MIP_POINT |⤶ | MIN_POINT_MAG_MIP_LINEAR |⤶ | MIN_LINEAR_MAG_MIP_POINT |⤶ | MIN_LINEAR_MAG_POINT_MIP_LINEAR |⤶ | MIN_MAG_LINEAR_MIP_POINT |⤶ | MIN_MAG_MIP_LINEAR |⤶ | COMPARISON_MIN_MAG_MIP_POINT |⤶ | COMPARISON_MIN_MAG_POINT_MIP_LINEAR |⤶ | COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT |⤶ | COMPARISON_MIN_POINT_MAG_MIP_LINEAR |⤶ | COMPARISON_MIN_LINEAR_MAG_MIP_POINT |⤶ | COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR |⤶ | COMPARISON_MIN_MAG_LINEAR_MIP_POINT |⤶ | COMPARISON_MIN_MAG_MIP_LINEAR |⤶ | COMPARISON_ANISOTROPIC |⤶ ⤶ ## AddressU( WRAPPING )/AddressV( WRAPPING )/AddressW( WRAPPING )⤶ ⤶ | Address Wrapping Modes |⤶ | ---------------------- |⤶ | WRAP |⤶ | MIRROR |⤶ | CLAMP |⤶ | BORDER |⤶ | MIRROR_ONCE |⤶ ⤶ ## ComparisonFunc( FUNC )⤶ ⤶ | Comparison Functions |⤶ | -------------------- |⤶ | NEVER |⤶ | LESS |⤶ | EQUAL |⤶ | LESS_EQUAL |⤶ | GREATER |⤶ | NOT_EQUAL |⤶ | GREATER_EQUAL |⤶ | ALWAYS |⤶ ⤶ ## Example usage⤶ ⤶ ```⤶ PS⤶ {⤶ // Point filtered texture, wrapping with Clamp, Mirror and Border with the equal comparison function⤶ CreateTexture2D( g_MyTexture ) < Attribute( "MyAwesomeTexture" ); Filter( MIN_MAG_LINEAR_MIP_POINT ); AddressU( CLAMP ); AddressV( MIRROR ); AddressW( BORDER ); ComparisonFunc( EQUAL ); >;⤶ }⤶ ```⤶