diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/shaderapi/ishadershadow.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'public/shaderapi/ishadershadow.h')
| -rw-r--r-- | public/shaderapi/ishadershadow.h | 368 |
1 files changed, 368 insertions, 0 deletions
diff --git a/public/shaderapi/ishadershadow.h b/public/shaderapi/ishadershadow.h new file mode 100644 index 0000000..170988f --- /dev/null +++ b/public/shaderapi/ishadershadow.h @@ -0,0 +1,368 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//===========================================================================// + +#ifndef ISHADERSHADOW_H +#define ISHADERSHADOW_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "shaderapi/shareddefs.h" +#include <materialsystem/imaterial.h> + + +//----------------------------------------------------------------------------- +// forward declarations +//----------------------------------------------------------------------------- +class CMeshBuilder; +class IMaterialVar; +struct LightDesc_t; + + +//----------------------------------------------------------------------------- +// important enumerations +//----------------------------------------------------------------------------- +enum ShaderDepthFunc_t +{ + SHADER_DEPTHFUNC_NEVER, + SHADER_DEPTHFUNC_NEARER, + SHADER_DEPTHFUNC_EQUAL, + SHADER_DEPTHFUNC_NEAREROREQUAL, + SHADER_DEPTHFUNC_FARTHER, + SHADER_DEPTHFUNC_NOTEQUAL, + SHADER_DEPTHFUNC_FARTHEROREQUAL, + SHADER_DEPTHFUNC_ALWAYS +}; + +enum ShaderBlendFactor_t +{ + SHADER_BLEND_ZERO, + SHADER_BLEND_ONE, + SHADER_BLEND_DST_COLOR, + SHADER_BLEND_ONE_MINUS_DST_COLOR, + SHADER_BLEND_SRC_ALPHA, + SHADER_BLEND_ONE_MINUS_SRC_ALPHA, + SHADER_BLEND_DST_ALPHA, + SHADER_BLEND_ONE_MINUS_DST_ALPHA, + SHADER_BLEND_SRC_ALPHA_SATURATE, + SHADER_BLEND_SRC_COLOR, + SHADER_BLEND_ONE_MINUS_SRC_COLOR +}; + +enum ShaderBlendOp_t +{ + SHADER_BLEND_OP_ADD, + SHADER_BLEND_OP_SUBTRACT, + SHADER_BLEND_OP_REVSUBTRACT, + SHADER_BLEND_OP_MIN, + SHADER_BLEND_OP_MAX +}; + +enum ShaderAlphaFunc_t +{ + SHADER_ALPHAFUNC_NEVER, + SHADER_ALPHAFUNC_LESS, + SHADER_ALPHAFUNC_EQUAL, + SHADER_ALPHAFUNC_LEQUAL, + SHADER_ALPHAFUNC_GREATER, + SHADER_ALPHAFUNC_NOTEQUAL, + SHADER_ALPHAFUNC_GEQUAL, + SHADER_ALPHAFUNC_ALWAYS +}; + +enum ShaderStencilFunc_t +{ + SHADER_STENCILFUNC_NEVER = 0, + SHADER_STENCILFUNC_LESS, + SHADER_STENCILFUNC_EQUAL, + SHADER_STENCILFUNC_LEQUAL, + SHADER_STENCILFUNC_GREATER, + SHADER_STENCILFUNC_NOTEQUAL, + SHADER_STENCILFUNC_GEQUAL, + SHADER_STENCILFUNC_ALWAYS +}; + +enum ShaderStencilOp_t +{ + SHADER_STENCILOP_KEEP = 0, + SHADER_STENCILOP_ZERO, + SHADER_STENCILOP_SET_TO_REFERENCE, + SHADER_STENCILOP_INCREMENT_CLAMP, + SHADER_STENCILOP_DECREMENT_CLAMP, + SHADER_STENCILOP_INVERT, + SHADER_STENCILOP_INCREMENT_WRAP, + SHADER_STENCILOP_DECREMENT_WRAP, +}; + +enum ShaderTexChannel_t +{ + SHADER_TEXCHANNEL_COLOR = 0, + SHADER_TEXCHANNEL_ALPHA +}; + +enum ShaderPolyModeFace_t +{ + SHADER_POLYMODEFACE_FRONT, + SHADER_POLYMODEFACE_BACK, + SHADER_POLYMODEFACE_FRONT_AND_BACK, +}; + +enum ShaderPolyMode_t +{ + SHADER_POLYMODE_POINT, + SHADER_POLYMODE_LINE, + SHADER_POLYMODE_FILL +}; + +enum ShaderTexArg_t +{ + SHADER_TEXARG_TEXTURE = 0, + SHADER_TEXARG_VERTEXCOLOR, + SHADER_TEXARG_SPECULARCOLOR, + SHADER_TEXARG_CONSTANTCOLOR, + SHADER_TEXARG_PREVIOUSSTAGE, + SHADER_TEXARG_NONE, + SHADER_TEXARG_ZERO, + SHADER_TEXARG_TEXTUREALPHA, + SHADER_TEXARG_INVTEXTUREALPHA, + SHADER_TEXARG_ONE, +}; + +enum ShaderTexOp_t +{ + // DX5 shaders support these + SHADER_TEXOP_MODULATE = 0, + SHADER_TEXOP_MODULATE2X, + SHADER_TEXOP_MODULATE4X, + SHADER_TEXOP_SELECTARG1, + SHADER_TEXOP_SELECTARG2, + SHADER_TEXOP_DISABLE, + + // DX6 shaders support these + SHADER_TEXOP_ADD, + SHADER_TEXOP_SUBTRACT, + SHADER_TEXOP_ADDSIGNED2X, + SHADER_TEXOP_BLEND_CONSTANTALPHA, + SHADER_TEXOP_BLEND_TEXTUREALPHA, + SHADER_TEXOP_BLEND_PREVIOUSSTAGEALPHA, + SHADER_TEXOP_MODULATECOLOR_ADDALPHA, + SHADER_TEXOP_MODULATEINVCOLOR_ADDALPHA, + + // DX7 + SHADER_TEXOP_DOTPRODUCT3 +}; + +enum ShaderTexGenParam_t +{ + SHADER_TEXGENPARAM_OBJECT_LINEAR, + SHADER_TEXGENPARAM_EYE_LINEAR, + SHADER_TEXGENPARAM_SPHERE_MAP, + SHADER_TEXGENPARAM_CAMERASPACEREFLECTIONVECTOR, + SHADER_TEXGENPARAM_CAMERASPACENORMAL +}; + +enum ShaderDrawBitField_t +{ + SHADER_DRAW_POSITION = 0x0001, + SHADER_DRAW_NORMAL = 0x0002, + SHADER_DRAW_COLOR = 0x0004, + SHADER_DRAW_SPECULAR = 0x0008, + + SHADER_DRAW_TEXCOORD0 = 0x0010, + SHADER_DRAW_TEXCOORD1 = 0x0020, + SHADER_DRAW_TEXCOORD2 = 0x0040, + SHADER_DRAW_TEXCOORD3 = 0x0080, + + SHADER_DRAW_LIGHTMAP_TEXCOORD0 = 0x0100, + SHADER_DRAW_LIGHTMAP_TEXCOORD1 = 0x0200, + SHADER_DRAW_LIGHTMAP_TEXCOORD2 = 0x0400, + SHADER_DRAW_LIGHTMAP_TEXCOORD3 = 0x0800, + + SHADER_DRAW_SECONDARY_TEXCOORD0 = 0x1000, + SHADER_DRAW_SECONDARY_TEXCOORD1 = 0x2000, + SHADER_DRAW_SECONDARY_TEXCOORD2 = 0x4000, + SHADER_DRAW_SECONDARY_TEXCOORD3 = 0x8000, + + SHADER_TEXCOORD_MASK = SHADER_DRAW_TEXCOORD0 | SHADER_DRAW_TEXCOORD1 | + SHADER_DRAW_TEXCOORD2 | SHADER_DRAW_TEXCOORD3, + + SHADER_LIGHTMAP_TEXCOORD_MASK = SHADER_DRAW_LIGHTMAP_TEXCOORD0 | + SHADER_DRAW_LIGHTMAP_TEXCOORD1 | + SHADER_DRAW_LIGHTMAP_TEXCOORD2 | + SHADER_DRAW_LIGHTMAP_TEXCOORD3, + + SHADER_SECONDARY_TEXCOORD_MASK = SHADER_DRAW_SECONDARY_TEXCOORD0 | + SHADER_DRAW_SECONDARY_TEXCOORD1 | + SHADER_DRAW_SECONDARY_TEXCOORD2 | + SHADER_DRAW_SECONDARY_TEXCOORD3, +}; + + +enum ShaderFogMode_t +{ + SHADER_FOGMODE_DISABLED = 0, + SHADER_FOGMODE_OO_OVERBRIGHT, + SHADER_FOGMODE_BLACK, + SHADER_FOGMODE_GREY, + SHADER_FOGMODE_FOGCOLOR, + SHADER_FOGMODE_WHITE, + SHADER_FOGMODE_NUMFOGMODES +}; + +enum ShaderMaterialSource_t +{ + SHADER_MATERIALSOURCE_MATERIAL = 0, + SHADER_MATERIALSOURCE_COLOR1, + SHADER_MATERIALSOURCE_COLOR2, +}; + + +// m_ZBias has only two bits in ShadowState_t, so be careful extending this enum +enum PolygonOffsetMode_t +{ + SHADER_POLYOFFSET_DISABLE = 0x0, + SHADER_POLYOFFSET_DECAL = 0x1, + SHADER_POLYOFFSET_SHADOW_BIAS = 0x2, + SHADER_POLYOFFSET_RESERVED = 0x3 // Reserved for future use +}; + + +//----------------------------------------------------------------------------- +// The Shader interface versions +//----------------------------------------------------------------------------- +#define SHADERSHADOW_INTERFACE_VERSION "ShaderShadow010" + + +//----------------------------------------------------------------------------- +// the shader API interface (methods called from shaders) +//----------------------------------------------------------------------------- +abstract_class IShaderShadow +{ +public: + // Sets the default *shadow* state + virtual void SetDefaultState() = 0; + + // Methods related to depth buffering + virtual void DepthFunc( ShaderDepthFunc_t depthFunc ) = 0; + virtual void EnableDepthWrites( bool bEnable ) = 0; + virtual void EnableDepthTest( bool bEnable ) = 0; + virtual void EnablePolyOffset( PolygonOffsetMode_t nOffsetMode ) = 0; + + // These methods for controlling stencil are obsolete and stubbed to do nothing. Stencil + // control is via the shaderapi/material system now, not part of the shadow state. + // Methods related to stencil + virtual void EnableStencil( bool bEnable ) = 0; + virtual void StencilFunc( ShaderStencilFunc_t stencilFunc ) = 0; + virtual void StencilPassOp( ShaderStencilOp_t stencilOp ) = 0; + virtual void StencilFailOp( ShaderStencilOp_t stencilOp ) = 0; + virtual void StencilDepthFailOp( ShaderStencilOp_t stencilOp ) = 0; + virtual void StencilReference( int nReference ) = 0; + virtual void StencilMask( int nMask ) = 0; + virtual void StencilWriteMask( int nMask ) = 0; + + // Suppresses/activates color writing + virtual void EnableColorWrites( bool bEnable ) = 0; + virtual void EnableAlphaWrites( bool bEnable ) = 0; + + // Methods related to alpha blending + virtual void EnableBlending( bool bEnable ) = 0; + virtual void BlendFunc( ShaderBlendFactor_t srcFactor, ShaderBlendFactor_t dstFactor ) = 0; + // More below... + + // Alpha testing + virtual void EnableAlphaTest( bool bEnable ) = 0; + virtual void AlphaFunc( ShaderAlphaFunc_t alphaFunc, float alphaRef /* [0-1] */ ) = 0; + + // Wireframe/filled polygons + virtual void PolyMode( ShaderPolyModeFace_t face, ShaderPolyMode_t polyMode ) = 0; + + // Back face culling + virtual void EnableCulling( bool bEnable ) = 0; + + // constant color + transparency + virtual void EnableConstantColor( bool bEnable ) = 0; + + // Indicates the vertex format for use with a vertex shader + // The flags to pass in here come from the VertexFormatFlags_t enum + // If pTexCoordDimensions is *not* specified, we assume all coordinates + // are 2-dimensional + virtual void VertexShaderVertexFormat( unsigned int nFlags, + int nTexCoordCount, int* pTexCoordDimensions, int nUserDataSize ) = 0; + + // Pixel and vertex shader methods + virtual void SetVertexShader( const char* pFileName, int nStaticVshIndex ) = 0; + virtual void SetPixelShader( const char* pFileName, int nStaticPshIndex = 0 ) = 0; + + // Indicates we're going to light the model + virtual void EnableLighting( bool bEnable ) = 0; + + // Enables specular lighting (lighting has also got to be enabled) + virtual void EnableSpecular( bool bEnable ) = 0; + + // Convert from linear to gamma color space on writes to frame buffer. + virtual void EnableSRGBWrite( bool bEnable ) = 0; + + // Convert from gamma to linear on texture fetch. + virtual void EnableSRGBRead( Sampler_t sampler, bool bEnable ) = 0; + + // Activate/deactivate skinning. Indexed blending is automatically + // enabled if it's available for this hardware. When blending is enabled, + // we allocate enough room for 3 weights (max allowed) + virtual void EnableVertexBlend( bool bEnable ) = 0; + + // per texture unit stuff + virtual void OverbrightValue( TextureStage_t stage, float value ) = 0; + virtual void EnableTexture( Sampler_t sampler, bool bEnable ) = 0; + virtual void EnableTexGen( TextureStage_t stage, bool bEnable ) = 0; + virtual void TexGen( TextureStage_t stage, ShaderTexGenParam_t param ) = 0; + + // alternate method of specifying per-texture unit stuff, more flexible and more complicated + // Can be used to specify different operation per channel (alpha/color)... + virtual void EnableCustomPixelPipe( bool bEnable ) = 0; + virtual void CustomTextureStages( int stageCount ) = 0; + virtual void CustomTextureOperation( TextureStage_t stage, ShaderTexChannel_t channel, + ShaderTexOp_t op, ShaderTexArg_t arg1, ShaderTexArg_t arg2 ) = 0; + + // indicates what per-vertex data we're providing + virtual void DrawFlags( unsigned int drawFlags ) = 0; + + // A simpler method of dealing with alpha modulation + virtual void EnableAlphaPipe( bool bEnable ) = 0; + virtual void EnableConstantAlpha( bool bEnable ) = 0; + virtual void EnableVertexAlpha( bool bEnable ) = 0; + virtual void EnableTextureAlpha( TextureStage_t stage, bool bEnable ) = 0; + + // GR - Separate alpha blending + virtual void EnableBlendingSeparateAlpha( bool bEnable ) = 0; + virtual void BlendFuncSeparateAlpha( ShaderBlendFactor_t srcFactor, ShaderBlendFactor_t dstFactor ) = 0; + virtual void FogMode( ShaderFogMode_t fogMode ) = 0; + + virtual void SetDiffuseMaterialSource( ShaderMaterialSource_t materialSource ) = 0; + + // Indicates the morph format for use with a vertex shader + // The flags to pass in here come from the MorphFormatFlags_t enum + virtual void SetMorphFormat( MorphFormat_t flags ) = 0; + + virtual void DisableFogGammaCorrection( bool bDisable ) = 0; //some blending modes won't work properly with corrected fog + + // Alpha to coverage + virtual void EnableAlphaToCoverage( bool bEnable ) = 0; + + // Shadow map filtering + virtual void SetShadowDepthFiltering( Sampler_t stage ) = 0; + + // More alpha blending state + virtual void BlendOp( ShaderBlendOp_t blendOp ) = 0; + virtual void BlendOpSeparateAlpha( ShaderBlendOp_t blendOp ) = 0; +}; +// end class IShaderShadow + + + +#endif // ISHADERSHADOW_H |