Files
Jedi-Academy/code/win32/win_stencilshadow.h
2013-04-04 14:32:05 -07:00

63 lines
1.5 KiB
C++

//
//
// 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