source-engine/materialsystem/shaderapidx9/shadershadowdx8.h

177 lines
4.5 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//===========================================================================//
#ifndef SHADERSHADOWDX8_H
#define SHADERSHADOWDX8_H
#ifdef _WIN32
#pragma once
#endif
#include "togl/rendermechanism.h"
#include "locald3dtypes.h"
#include "shaderapi/ishadershadow.h"
class IShaderAPIDX8;
//-----------------------------------------------------------------------------
// Important enumerations
//-----------------------------------------------------------------------------
enum
{
MAX_SAMPLERS = 16,
MAX_TEXTURE_STAGES = 16,
};
//-----------------------------------------------------------------------------
// A structure maintaining the shadowed board state
//-----------------------------------------------------------------------------
struct TextureStageShadowState_t
{
// State shadowing affects these
D3DTEXTUREOP m_ColorOp;
int m_ColorArg1;
int m_ColorArg2;
D3DTEXTUREOP m_AlphaOp;
int m_AlphaArg1;
int m_AlphaArg2;
int m_TexCoordIndex;
};
struct SamplerShadowState_t
{
bool m_TextureEnable : 1;
bool m_SRGBReadEnable : 1;
bool m_Fetch4Enable : 1;
bool m_ShadowFilterEnable : 1;
};
struct ShadowState_t
{
// Depth buffering state
D3DCMPFUNC m_ZFunc;
D3DZBUFFERTYPE m_ZEnable;
// Write enable
DWORD m_ColorWriteEnable;
// Fill mode
D3DFILLMODE m_FillMode;
// Alpha state
D3DBLEND m_SrcBlend;
D3DBLEND m_DestBlend;
D3DBLENDOP m_BlendOp;
// Separate alpha blend state
D3DBLEND m_SrcBlendAlpha;
D3DBLEND m_DestBlendAlpha;
D3DBLENDOP m_BlendOpAlpha;
D3DCMPFUNC m_AlphaFunc;
int m_AlphaRef;
// Texture stage state
TextureStageShadowState_t m_TextureStage[MAX_TEXTURE_STAGES];
// Sampler state
SamplerShadowState_t m_SamplerState[MAX_SAMPLERS];
ShaderFogMode_t m_FogMode;
D3DMATERIALCOLORSOURCE m_DiffuseMaterialSource;
unsigned char m_ZWriteEnable:1;
unsigned char m_ZBias:2;
// Cull State?
unsigned char m_CullEnable:1;
// Lighting in hardware?
unsigned char m_Lighting:1;
unsigned char m_SpecularEnable:1;
unsigned char m_AlphaBlendEnable:1;
unsigned char m_AlphaTestEnable:1;
// Fixed function?
unsigned char m_UsingFixedFunction:1;
// Vertex blending?
unsigned char m_VertexBlendEnable:1;
// Auto-convert from linear to gamma upon writing to the frame buffer?
unsigned char m_SRGBWriteEnable:1;
// Seperate Alpha Blend?
unsigned char m_SeparateAlphaBlendEnable:1;
// Stencil?
unsigned char m_StencilEnable:1;
unsigned char m_bDisableFogGammaCorrection:1;
unsigned char m_EnableAlphaToCoverage:1;
unsigned char m_Reserved : 1;
unsigned short m_nReserved2;
};
//-----------------------------------------------------------------------------
// These are part of the "shadow" since they describe the shading algorithm
// but aren't actually captured in the state transition table
// because it would produce too many transitions
//-----------------------------------------------------------------------------
struct ShadowShaderState_t
{
// The vertex + pixel shader group to use...
VertexShader_t m_VertexShader;
PixelShader_t m_PixelShader;
// The static vertex + pixel shader indices
int m_nStaticVshIndex;
int m_nStaticPshIndex;
// Vertex data used by this snapshot
// Note that the vertex format actually used will be the
// aggregate of the vertex formats used by all snapshots in a material
VertexFormat_t m_VertexUsage;
// Morph data used by this snapshot
// Note that the morph format actually used will be the
// aggregate of the morph formats used by all snapshots in a material
MorphFormat_t m_MorphUsage;
// Modulate constant color into the vertex color
bool m_ModulateConstantColor;
bool m_nReserved[3];
};
//-----------------------------------------------------------------------------
// The shader setup API
//-----------------------------------------------------------------------------
abstract_class IShaderShadowDX8 : public IShaderShadow
{
public:
// Initializes it
virtual void Init() = 0;
// Gets at the shadow state
virtual ShadowState_t const& GetShadowState() = 0;
virtual ShadowShaderState_t const& GetShadowShaderState() = 0;
// This must be called right before taking a snapshot
virtual void ComputeAggregateShadowState( ) = 0;
// Class factory methods
static IShaderShadowDX8* Create( IShaderAPIDX8* pShaderAPIDX8 );
static void Destroy( IShaderShadowDX8* pShaderShadow );
};
extern IShaderShadowDX8 *g_pShaderShadowDx8;
#endif // SHADERSHADOWDX8_H