mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-22 14:16:50 +00:00
177 lines
4.5 KiB
C++
177 lines
4.5 KiB
C++
//========= 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
|