Initial commit.
This commit is contained in:
63
code/win32/win_stencilshadow.h
Normal file
63
code/win32/win_stencilshadow.h
Normal file
@@ -0,0 +1,63 @@
|
||||
//
|
||||
//
|
||||
// win_stencilshadow.h
|
||||
//
|
||||
// Declaration for stencil shadowing class
|
||||
//
|
||||
//
|
||||
|
||||
#ifndef _WIN_STENCILSHADOW_H_
|
||||
#define _WIN_STENCILSHADOW_H_
|
||||
|
||||
// Quick way turn off all stencilshadow code, and get back 170k of memory:
|
||||
//#define DISABLE_STENCILSHADOW
|
||||
|
||||
// Enable this to enable Carmack's stencil reverse method
|
||||
#define _STENCIL_REVERSE
|
||||
|
||||
typedef struct
|
||||
{
|
||||
// facing is only one bit, but we can't do better than 4 bytes without
|
||||
// packing all the data we need into a single unsigned short, which
|
||||
// isn't really worth it. (unless we REALLY need 64k at some point).
|
||||
unsigned short i2;
|
||||
byte facing;
|
||||
} edgeDef_t;
|
||||
|
||||
#define MAX_EDGE_DEFS 16
|
||||
|
||||
|
||||
class StencilShadow
|
||||
{
|
||||
public:
|
||||
|
||||
#ifndef DISABLE_STENCILSHADOW
|
||||
edgeDef_t m_edgeDefs[SHADER_MAX_VERTEXES][MAX_EDGE_DEFS];
|
||||
short m_numEdgeDefs[SHADER_MAX_VERTEXES];
|
||||
byte m_facing[SHADER_MAX_INDEXES/3];
|
||||
unsigned short m_shadowIndexes[SHADER_MAX_INDEXES];
|
||||
unsigned short m_nIndexes;
|
||||
float m_extrusionIndicators[SHADER_MAX_VERTEXES/2];
|
||||
#ifdef _STENCIL_REVERSE
|
||||
unsigned short m_shadowIndexesCap[SHADER_MAX_INDEXES];
|
||||
unsigned short m_nIndexesCap;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
DWORD m_dwVertexShaderShadow;
|
||||
DWORD *pVerts; // For reusing vertices in multiple shadow renderings
|
||||
DWORD *pExtrusions;
|
||||
|
||||
StencilShadow();
|
||||
~StencilShadow();
|
||||
bool Initialize();
|
||||
void AddEdge( unsigned short i1, unsigned short i2, byte facing );
|
||||
void BuildEdges();
|
||||
bool BuildFromLight();
|
||||
void RenderShadow();
|
||||
void FinishShadows();
|
||||
};
|
||||
|
||||
extern StencilShadow StencilShadower;
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user