Files
2026-06-01 12:46:52 +02:00

342 lines
22 KiB
C++

#include "stdafx.h"
#include "KStateManager.h"
namespace StateManager
{
static float RS_f_0 = 0.0f;
static float RS_f_1 = 1.0f;
static float RS_f_64 = 64.0f;
DWORD _RsHolder<ST_RenderState>::DefaultState[1][RS_MAX];
DWORD _RsHolder<ST_RenderState>::StateIndexTable[RS_MAX];
DWORD _RsHolder<ST_RenderState>::IndexStateTable[RS_CNT];
DWORD _RsHolder<ST_SamplerState>::DefaultState[MAX_TEXTURESTAGE][SS_MAX];
DWORD _RsHolder<ST_SamplerState>::StateIndexTable[SS_MAX];
DWORD _RsHolder<ST_SamplerState>::IndexStateTable[SS_CNT];
DWORD _RsHolder<ST_TextureState>::DefaultState[MAX_TEXTURESTAGE][TS_MAX];
DWORD _RsHolder<ST_TextureState>::StateIndexTable[TS_MAX];
DWORD _RsHolder<ST_TextureState>::IndexStateTable[TS_CNT];
void _RsHolder<ST_RenderState>::init()
{
memset( DefaultState, 0, sizeof(DefaultState) );
memset( StateIndexTable, 0, sizeof(StateIndexTable) );
// Default Render State Initialize
DefaultState[0][ D3DRS_ZENABLE ] = D3DZB_TRUE;
DefaultState[0][ D3DRS_FILLMODE ] = D3DFILL_SOLID;
DefaultState[0][ D3DRS_SHADEMODE ] = D3DSHADE_GOURAUD;
DefaultState[0][ D3DRS_ZWRITEENABLE ] = TRUE;
DefaultState[0][ D3DRS_ALPHATESTENABLE ] = FALSE;
DefaultState[0][ D3DRS_LASTPIXEL] = TRUE;
DefaultState[0][ D3DRS_SRCBLEND ] = D3DBLEND_ONE;
DefaultState[0][ D3DRS_DESTBLEND ] = D3DBLEND_ZERO;
DefaultState[0][ D3DRS_CULLMODE ] = D3DCULL_CCW;
DefaultState[0][ D3DRS_ZFUNC ] = D3DCMP_LESSEQUAL;
DefaultState[0][ D3DRS_ALPHAREF ] = 0;
DefaultState[0][ D3DRS_ALPHAFUNC ] = D3DCMP_ALWAYS;
DefaultState[0][ D3DRS_DITHERENABLE ] = FALSE;
DefaultState[0][ D3DRS_ALPHABLENDENABLE ] = FALSE;
DefaultState[0][ D3DRS_FOGENABLE ] = FALSE;
DefaultState[0][ D3DRS_SPECULARENABLE ] = FALSE;
DefaultState[0][ D3DRS_FOGCOLOR ] = 0;
DefaultState[0][ D3DRS_FOGTABLEMODE ] = D3DFOG_NONE;
DefaultState[0][ D3DRS_FOGSTART ] = *((DWORD*)(&RS_f_0));
DefaultState[0][ D3DRS_FOGEND ] = *((DWORD*)(&RS_f_1));
DefaultState[0][ D3DRS_FOGDENSITY ] = *((DWORD*)(&RS_f_1));
DefaultState[0][ D3DRS_RANGEFOGENABLE ] = FALSE;
DefaultState[0][ D3DRS_STENCILENABLE ] = FALSE;
DefaultState[0][ D3DRS_STENCILFAIL ] = D3DSTENCILOP_KEEP;
DefaultState[0][ D3DRS_STENCILZFAIL ] = D3DSTENCILOP_KEEP;
DefaultState[0][ D3DRS_STENCILPASS ] = D3DSTENCILOP_KEEP;
DefaultState[0][ D3DRS_STENCILFUNC ] = D3DCMP_ALWAYS;
DefaultState[0][ D3DRS_STENCILREF ] = 0;
DefaultState[0][ D3DRS_STENCILMASK ] = 0xFFFFFFFF;
DefaultState[0][ D3DRS_STENCILWRITEMASK ] = 0xFFFFFFFF;
DefaultState[0][ D3DRS_TEXTUREFACTOR ] = 0xFFFFFFFF;
DefaultState[0][ D3DRS_WRAP0 ] = 0;
DefaultState[0][ D3DRS_WRAP1 ] = 0;
DefaultState[0][ D3DRS_WRAP2 ] = 0;
DefaultState[0][ D3DRS_WRAP3 ] = 0;
DefaultState[0][ D3DRS_WRAP4 ] = 0;
DefaultState[0][ D3DRS_WRAP5 ] = 0;
DefaultState[0][ D3DRS_WRAP6 ] = 0;
DefaultState[0][ D3DRS_WRAP7 ] = 0;
DefaultState[0][ D3DRS_CLIPPING ] = TRUE;
DefaultState[0][ D3DRS_LIGHTING ] = TRUE;
DefaultState[0][ D3DRS_AMBIENT ] = 0;
DefaultState[0][ D3DRS_FOGVERTEXMODE ] = D3DFOG_NONE;
DefaultState[0][ D3DRS_COLORVERTEX ] = TRUE;
DefaultState[0][ D3DRS_LOCALVIEWER ] = TRUE;
DefaultState[0][ D3DRS_NORMALIZENORMALS ] = FALSE;
DefaultState[0][ D3DRS_DIFFUSEMATERIALSOURCE ] = D3DMCS_COLOR1;
DefaultState[0][ D3DRS_SPECULARMATERIALSOURCE ] = D3DMCS_COLOR2;
DefaultState[0][ D3DRS_AMBIENTMATERIALSOURCE ] = D3DMCS_MATERIAL;
DefaultState[0][ D3DRS_EMISSIVEMATERIALSOURCE ] = D3DMCS_MATERIAL;
DefaultState[0][ D3DRS_VERTEXBLEND ] = D3DVBF_DISABLE;
DefaultState[0][ D3DRS_CLIPPLANEENABLE ] = 0;
DefaultState[0][ D3DRS_POINTSIZE ] = *((DWORD*)(&RS_f_1));
DefaultState[0][ D3DRS_POINTSIZE_MIN ] = *((DWORD*)(&RS_f_1));
DefaultState[0][ D3DRS_POINTSPRITEENABLE ] = FALSE;
DefaultState[0][ D3DRS_POINTSCALEENABLE ] = FALSE;
DefaultState[0][ D3DRS_POINTSCALE_A ] = *((DWORD*)(&RS_f_1));
DefaultState[0][ D3DRS_POINTSCALE_B ] = *((DWORD*)(&RS_f_0));
DefaultState[0][ D3DRS_POINTSCALE_C ] = *((DWORD*)(&RS_f_0));
DefaultState[0][ D3DRS_MULTISAMPLEANTIALIAS ] = TRUE;
DefaultState[0][ D3DRS_MULTISAMPLEMASK ] = 0xFFFFFFFF;
DefaultState[0][ D3DRS_PATCHEDGESTYLE ] = D3DPATCHEDGE_DISCRETE;
DefaultState[0][ D3DRS_DEBUGMONITORTOKEN ] = D3DDMT_ENABLE;
DefaultState[0][ D3DRS_POINTSIZE_MAX ] = *((DWORD*)(&RS_f_64));
DefaultState[0][ D3DRS_INDEXEDVERTEXBLENDENABLE ] = FALSE;
DefaultState[0][ D3DRS_COLORWRITEENABLE ] = 0x0000000F;
DefaultState[0][ D3DRS_TWEENFACTOR ] = *((DWORD*)(&RS_f_0));
DefaultState[0][ D3DRS_BLENDOP ] = D3DBLENDOP_ADD;
DefaultState[0][ D3DRS_POSITIONDEGREE ] = D3DDEGREE_CUBIC;
DefaultState[0][ D3DRS_NORMALDEGREE ] = D3DDEGREE_LINEAR;
DefaultState[0][ D3DRS_SCISSORTESTENABLE ] = FALSE;
DefaultState[0][ D3DRS_SLOPESCALEDEPTHBIAS ] = 0;
DefaultState[0][ D3DRS_ANTIALIASEDLINEENABLE ] = FALSE;
DefaultState[0][ D3DRS_MINTESSELLATIONLEVEL ] = *((DWORD*)(&RS_f_1));
DefaultState[0][ D3DRS_MAXTESSELLATIONLEVEL ] = *((DWORD*)(&RS_f_1));
DefaultState[0][ D3DRS_ADAPTIVETESS_X ] = *((DWORD*)(&RS_f_0));
DefaultState[0][ D3DRS_ADAPTIVETESS_Y ] = *((DWORD*)(&RS_f_0));
DefaultState[0][ D3DRS_ADAPTIVETESS_Z ] = *((DWORD*)(&RS_f_1));
DefaultState[0][ D3DRS_ADAPTIVETESS_W ] = *((DWORD*)(&RS_f_0));
DefaultState[0][ D3DRS_ENABLEADAPTIVETESSELLATION ] = FALSE;
DefaultState[0][ D3DRS_TWOSIDEDSTENCILMODE ] = FALSE;
DefaultState[0][ D3DRS_CCW_STENCILFAIL ] = D3DSTENCILOP_KEEP;
DefaultState[0][ D3DRS_CCW_STENCILZFAIL ] = D3DSTENCILOP_KEEP;
DefaultState[0][ D3DRS_CCW_STENCILPASS ] = D3DSTENCILOP_KEEP;
DefaultState[0][ D3DRS_CCW_STENCILFUNC ] = D3DCMP_ALWAYS;
DefaultState[0][ D3DRS_COLORWRITEENABLE1 ] = 0x0000000F;
DefaultState[0][ D3DRS_COLORWRITEENABLE2 ] = 0x0000000F;
DefaultState[0][ D3DRS_COLORWRITEENABLE3 ] = 0x0000000F;
DefaultState[0][ D3DRS_BLENDFACTOR ] = 0xFFFFFFFF;
DefaultState[0][ D3DRS_SRGBWRITEENABLE ] = 0;
DefaultState[0][ D3DRS_DEPTHBIAS ] = 0;
DefaultState[0][ D3DRS_WRAP8 ] = 0;
DefaultState[0][ D3DRS_WRAP9 ] = 0;
DefaultState[0][ D3DRS_WRAP10 ] = 0;
DefaultState[0][ D3DRS_WRAP11 ] = 0;
DefaultState[0][ D3DRS_WRAP12 ] = 0;
DefaultState[0][ D3DRS_WRAP13 ] = 0;
DefaultState[0][ D3DRS_WRAP14 ] = 0;
DefaultState[0][ D3DRS_WRAP15 ] = 0;
DefaultState[0][ D3DRS_SEPARATEALPHABLENDENABLE ] = FALSE;
DefaultState[0][ D3DRS_SRCBLENDALPHA ] = D3DBLEND_ONE;
DefaultState[0][ D3DRS_DESTBLENDALPHA ] = D3DBLEND_ZERO;
DefaultState[0][ D3DRS_BLENDOPALPHA ] = D3DBLENDOP_ADD;
// Render State Index Table Initialize
// 자주 쓰이는것 우선순위. 4개 단위로 검사를 하게 된다.
IndexStateTable[0] = D3DRS_ALPHABLENDENABLE; StateIndexTable[D3DRS_ALPHABLENDENABLE] = 0;
IndexStateTable[1] = D3DRS_SRCBLEND; StateIndexTable[D3DRS_SRCBLEND] = 1;
IndexStateTable[2] = D3DRS_DESTBLEND; StateIndexTable[D3DRS_DESTBLEND] = 2;
IndexStateTable[3] = D3DRS_BLENDOP; StateIndexTable[D3DRS_BLENDOP] = 3;
IndexStateTable[4] = D3DRS_ALPHATESTENABLE; StateIndexTable[D3DRS_ALPHATESTENABLE] = 4;
IndexStateTable[5] = D3DRS_ALPHAREF; StateIndexTable[D3DRS_ALPHAREF] = 5;
IndexStateTable[6] = D3DRS_ALPHAFUNC; StateIndexTable[D3DRS_ALPHAFUNC] = 6;
IndexStateTable[7] = D3DRS_LIGHTING; StateIndexTable[D3DRS_LIGHTING] = 7;
IndexStateTable[8] = D3DRS_ZENABLE; StateIndexTable[D3DRS_ZENABLE] = 8;
IndexStateTable[9] = D3DRS_ZWRITEENABLE; StateIndexTable[D3DRS_ZWRITEENABLE] = 9;
IndexStateTable[10] = D3DRS_ZFUNC; StateIndexTable[D3DRS_ZFUNC] = 10;
IndexStateTable[11] = D3DRS_CULLMODE; StateIndexTable[D3DRS_CULLMODE] = 11;
IndexStateTable[12] = D3DRS_TEXTUREFACTOR; StateIndexTable[D3DRS_TEXTUREFACTOR] = 12;
IndexStateTable[13] = D3DRS_FILLMODE; StateIndexTable[D3DRS_FILLMODE] = 13;
IndexStateTable[14] = D3DRS_CLIPPLANEENABLE; StateIndexTable[D3DRS_CLIPPLANEENABLE] = 14;
IndexStateTable[15] = D3DRS_SPECULARENABLE; StateIndexTable[D3DRS_SPECULARENABLE] = 15;
IndexStateTable[16] = D3DRS_FOGENABLE; StateIndexTable[D3DRS_FOGENABLE] = 16;
IndexStateTable[17] = D3DRS_FOGTABLEMODE; StateIndexTable[D3DRS_FOGTABLEMODE] = 17;
IndexStateTable[18] = D3DRS_FOGSTART; StateIndexTable[D3DRS_FOGSTART] = 18;
IndexStateTable[19] = D3DRS_FOGEND; StateIndexTable[D3DRS_FOGEND] = 19;
IndexStateTable[20] = D3DRS_FOGCOLOR; StateIndexTable[D3DRS_FOGCOLOR] = 20;
IndexStateTable[21] = D3DRS_FOGVERTEXMODE; StateIndexTable[D3DRS_FOGVERTEXMODE] = 21;
IndexStateTable[22] = D3DRS_FOGDENSITY; StateIndexTable[D3DRS_FOGDENSITY] = 22;
IndexStateTable[23] = D3DRS_RANGEFOGENABLE; StateIndexTable[D3DRS_RANGEFOGENABLE] = 23;
IndexStateTable[24] = D3DRS_CLIPPING; StateIndexTable[D3DRS_CLIPPING] = 24;
IndexStateTable[25] = D3DRS_DITHERENABLE; StateIndexTable[D3DRS_DITHERENABLE] = 25;
IndexStateTable[26] = D3DRS_AMBIENT; StateIndexTable[D3DRS_AMBIENT] = 26;
IndexStateTable[27] = D3DRS_MULTISAMPLEANTIALIAS; StateIndexTable[D3DRS_MULTISAMPLEANTIALIAS] = 27;
IndexStateTable[28] = D3DRS_MULTISAMPLEMASK; StateIndexTable[D3DRS_MULTISAMPLEMASK] = 28;
IndexStateTable[29] = D3DRS_BLENDFACTOR; StateIndexTable[D3DRS_BLENDFACTOR] = 29;
IndexStateTable[30] = D3DRS_SHADEMODE; StateIndexTable[D3DRS_SHADEMODE] = 30;
IndexStateTable[31] = D3DRS_LASTPIXEL; StateIndexTable[D3DRS_LASTPIXEL] = 31;
IndexStateTable[32] = D3DRS_COLORWRITEENABLE; StateIndexTable[D3DRS_COLORWRITEENABLE] = 32;
IndexStateTable[33] = D3DRS_COLORWRITEENABLE1; StateIndexTable[D3DRS_COLORWRITEENABLE1] = 33;
IndexStateTable[34] = D3DRS_COLORWRITEENABLE2; StateIndexTable[D3DRS_COLORWRITEENABLE2] = 34;
IndexStateTable[35] = D3DRS_COLORWRITEENABLE3; StateIndexTable[D3DRS_COLORWRITEENABLE3] = 35;
IndexStateTable[36] = D3DRS_VERTEXBLEND; StateIndexTable[D3DRS_VERTEXBLEND] = 36;
IndexStateTable[37] = D3DRS_INDEXEDVERTEXBLENDENABLE;StateIndexTable[D3DRS_INDEXEDVERTEXBLENDENABLE] = 37;
IndexStateTable[38] = D3DRS_LOCALVIEWER; StateIndexTable[D3DRS_LOCALVIEWER] = 38;
IndexStateTable[39] = D3DRS_NORMALIZENORMALS; StateIndexTable[D3DRS_NORMALIZENORMALS] = 39;
IndexStateTable[40] = D3DRS_STENCILENABLE; StateIndexTable[D3DRS_STENCILENABLE] = 40;
IndexStateTable[41] = D3DRS_STENCILFAIL; StateIndexTable[D3DRS_STENCILFAIL] = 41;
IndexStateTable[42] = D3DRS_STENCILZFAIL; StateIndexTable[D3DRS_STENCILZFAIL] = 42;
IndexStateTable[43] = D3DRS_STENCILPASS; StateIndexTable[D3DRS_STENCILPASS] = 43;
IndexStateTable[44] = D3DRS_STENCILFUNC; StateIndexTable[D3DRS_STENCILFUNC] = 44;
IndexStateTable[45] = D3DRS_STENCILREF; StateIndexTable[D3DRS_STENCILREF] = 45;
IndexStateTable[46] = D3DRS_STENCILMASK; StateIndexTable[D3DRS_STENCILMASK] = 46;
IndexStateTable[47] = D3DRS_STENCILWRITEMASK; StateIndexTable[D3DRS_STENCILWRITEMASK] = 47;
IndexStateTable[48] = D3DRS_CCW_STENCILFAIL; StateIndexTable[D3DRS_CCW_STENCILFAIL] = 48;
IndexStateTable[49] = D3DRS_CCW_STENCILZFAIL; StateIndexTable[D3DRS_CCW_STENCILZFAIL] = 49;
IndexStateTable[50] = D3DRS_CCW_STENCILPASS; StateIndexTable[D3DRS_CCW_STENCILPASS] = 50;
IndexStateTable[51] = D3DRS_CCW_STENCILFUNC; StateIndexTable[D3DRS_CCW_STENCILFUNC] = 51;
IndexStateTable[52] = D3DRS_SEPARATEALPHABLENDENABLE;StateIndexTable[D3DRS_SEPARATEALPHABLENDENABLE] = 52;
IndexStateTable[53] = D3DRS_SRCBLENDALPHA; StateIndexTable[D3DRS_SRCBLENDALPHA] = 53;
IndexStateTable[54] = D3DRS_DESTBLENDALPHA; StateIndexTable[D3DRS_DESTBLENDALPHA] = 54;
IndexStateTable[55] = D3DRS_BLENDOPALPHA; StateIndexTable[D3DRS_BLENDOPALPHA] = 55;
IndexStateTable[56] = D3DRS_COLORVERTEX; StateIndexTable[D3DRS_COLORVERTEX] = 56;
IndexStateTable[57] = D3DRS_DIFFUSEMATERIALSOURCE; StateIndexTable[D3DRS_DIFFUSEMATERIALSOURCE] = 57;
IndexStateTable[58] = D3DRS_SPECULARMATERIALSOURCE; StateIndexTable[D3DRS_SPECULARMATERIALSOURCE] = 58;
IndexStateTable[59] = D3DRS_AMBIENTMATERIALSOURCE; StateIndexTable[D3DRS_AMBIENTMATERIALSOURCE] = 59;
IndexStateTable[60] = D3DRS_EMISSIVEMATERIALSOURCE; StateIndexTable[D3DRS_EMISSIVEMATERIALSOURCE] = 60;
IndexStateTable[61] = D3DRS_PATCHEDGESTYLE; StateIndexTable[D3DRS_PATCHEDGESTYLE] = 61;
IndexStateTable[62] = D3DRS_TWOSIDEDSTENCILMODE; StateIndexTable[D3DRS_TWOSIDEDSTENCILMODE] = 62;
IndexStateTable[63] = D3DRS_SCISSORTESTENABLE; StateIndexTable[D3DRS_SCISSORTESTENABLE] = 63;
IndexStateTable[64] = D3DRS_POSITIONDEGREE; StateIndexTable[D3DRS_POSITIONDEGREE] = 64;
IndexStateTable[65] = D3DRS_NORMALDEGREE; StateIndexTable[D3DRS_NORMALDEGREE] = 65;
IndexStateTable[66] = D3DRS_SLOPESCALEDEPTHBIAS; StateIndexTable[D3DRS_SLOPESCALEDEPTHBIAS] = 66;
IndexStateTable[67] = D3DRS_DEBUGMONITORTOKEN; StateIndexTable[D3DRS_DEBUGMONITORTOKEN] = 67;
IndexStateTable[68] = D3DRS_TWEENFACTOR; StateIndexTable[D3DRS_TWEENFACTOR] = 68;
IndexStateTable[69] = D3DRS_ANTIALIASEDLINEENABLE; StateIndexTable[D3DRS_ANTIALIASEDLINEENABLE] = 69;
IndexStateTable[70] = D3DRS_SRGBWRITEENABLE; StateIndexTable[D3DRS_SRGBWRITEENABLE] = 70;
IndexStateTable[71] = D3DRS_DEPTHBIAS; StateIndexTable[D3DRS_DEPTHBIAS] = 71;
IndexStateTable[72] = D3DRS_WRAP0; StateIndexTable[D3DRS_WRAP0] = 72;
IndexStateTable[73] = D3DRS_WRAP1; StateIndexTable[D3DRS_WRAP1] = 73;
IndexStateTable[74] = D3DRS_WRAP2; StateIndexTable[D3DRS_WRAP2] = 74;
IndexStateTable[75] = D3DRS_WRAP3; StateIndexTable[D3DRS_WRAP3] = 75;
IndexStateTable[76] = D3DRS_WRAP4; StateIndexTable[D3DRS_WRAP4] = 76;
IndexStateTable[77] = D3DRS_WRAP5; StateIndexTable[D3DRS_WRAP5] = 77;
IndexStateTable[78] = D3DRS_WRAP6; StateIndexTable[D3DRS_WRAP6] = 78;
IndexStateTable[79] = D3DRS_WRAP7; StateIndexTable[D3DRS_WRAP7] = 79;
IndexStateTable[80] = D3DRS_WRAP8; StateIndexTable[D3DRS_WRAP8] = 80;
IndexStateTable[81] = D3DRS_WRAP9; StateIndexTable[D3DRS_WRAP9] = 81;
IndexStateTable[82] = D3DRS_WRAP10; StateIndexTable[D3DRS_WRAP10] = 82;
IndexStateTable[83] = D3DRS_WRAP11; StateIndexTable[D3DRS_WRAP11] = 83;
IndexStateTable[84] = D3DRS_WRAP12; StateIndexTable[D3DRS_WRAP12] = 84;
IndexStateTable[85] = D3DRS_WRAP13; StateIndexTable[D3DRS_WRAP13] = 85;
IndexStateTable[86] = D3DRS_WRAP14; StateIndexTable[D3DRS_WRAP14] = 86;
IndexStateTable[87] = D3DRS_WRAP15; StateIndexTable[D3DRS_WRAP15] = 87;
IndexStateTable[88] = D3DRS_POINTSIZE; StateIndexTable[D3DRS_POINTSIZE] = 88;
IndexStateTable[89] = D3DRS_POINTSIZE_MIN; StateIndexTable[D3DRS_POINTSIZE_MIN] = 89;
IndexStateTable[90] = D3DRS_POINTSIZE_MAX; StateIndexTable[D3DRS_POINTSIZE_MAX] = 90;
IndexStateTable[91] = D3DRS_POINTSPRITEENABLE; StateIndexTable[D3DRS_POINTSPRITEENABLE] = 91;
IndexStateTable[92] = D3DRS_POINTSCALEENABLE; StateIndexTable[D3DRS_POINTSCALEENABLE] = 92;
IndexStateTable[93] = D3DRS_POINTSCALE_A; StateIndexTable[D3DRS_POINTSCALE_A] = 93;
IndexStateTable[94] = D3DRS_POINTSCALE_B; StateIndexTable[D3DRS_POINTSCALE_B] = 94;
IndexStateTable[95] = D3DRS_POINTSCALE_C; StateIndexTable[D3DRS_POINTSCALE_C] = 95;
// Tessellation 관련 State는 취급하지 않는다.
//IndexStateTable[96] = D3DRS_MINTESSELLATIONLEVEL ;
//IndexStateTable[97] = D3DRS_MAXTESSELLATIONLEVEL ;
//IndexStateTable[98] = D3DRS_ADAPTIVETESS_X ;
//IndexStateTable[99] = D3DRS_ADAPTIVETESS_Y ;
//IndexStateTable[100] = D3DRS_ADAPTIVETESS_Z ;
//IndexStateTable[101] = D3DRS_ADAPTIVETESS_W ;
//IndexStateTable[102] = D3DRS_ENABLEADAPTIVETESSELLATION ;
}
void _RsHolder<ST_SamplerState>::init()
{
memset( DefaultState, 0, sizeof(DefaultState) );
for( DWORD i = 0; i < MAX_TEXTURESTAGE; i++ )
{
DefaultState[i][ D3DSAMP_ADDRESSU ] = D3DTADDRESS_WRAP;
DefaultState[i][ D3DSAMP_ADDRESSV ] = D3DTADDRESS_WRAP;
DefaultState[i][ D3DSAMP_ADDRESSW ] = D3DTADDRESS_WRAP;
DefaultState[i][ D3DSAMP_BORDERCOLOR ] = 0x00000000;
DefaultState[i][ D3DSAMP_MAGFILTER ] = D3DTEXF_POINT;
DefaultState[i][ D3DSAMP_MINFILTER ] = D3DTEXF_POINT;
DefaultState[i][ D3DSAMP_MIPFILTER ] = D3DTEXF_NONE;
DefaultState[i][ D3DSAMP_MIPMAPLODBIAS ] = 0;
DefaultState[i][ D3DSAMP_MAXMIPLEVEL ] = 0;
DefaultState[i][ D3DSAMP_MAXANISOTROPY ] = 1;
DefaultState[i][ D3DSAMP_SRGBTEXTURE ] = 0;
DefaultState[i][ D3DSAMP_ELEMENTINDEX ] = 0;
DefaultState[i][ D3DSAMP_DMAPOFFSET ] = 0;
}
IndexStateTable[0] = D3DSAMP_ADDRESSU; StateIndexTable[D3DSAMP_ADDRESSU] = 0;
IndexStateTable[1] = D3DSAMP_ADDRESSV; StateIndexTable[D3DSAMP_ADDRESSV] = 1;
IndexStateTable[2] = D3DSAMP_ADDRESSW; StateIndexTable[D3DSAMP_ADDRESSW] = 2;
IndexStateTable[3] = D3DSAMP_BORDERCOLOR; StateIndexTable[D3DSAMP_BORDERCOLOR] = 3;
IndexStateTable[4] = D3DSAMP_MAGFILTER; StateIndexTable[D3DSAMP_MAGFILTER] = 4;
IndexStateTable[5] = D3DSAMP_MINFILTER; StateIndexTable[D3DSAMP_MINFILTER] = 5;
IndexStateTable[6] = D3DSAMP_MIPFILTER; StateIndexTable[D3DSAMP_MIPFILTER] = 6;
IndexStateTable[7] = D3DSAMP_MIPMAPLODBIAS; StateIndexTable[D3DSAMP_MIPMAPLODBIAS] = 7;
IndexStateTable[8] = D3DSAMP_MAXMIPLEVEL; StateIndexTable[D3DSAMP_MAXMIPLEVEL] = 8;
IndexStateTable[9] = D3DSAMP_MAXANISOTROPY; StateIndexTable[D3DSAMP_MAXANISOTROPY] = 9;
IndexStateTable[10] = D3DSAMP_SRGBTEXTURE; StateIndexTable[D3DSAMP_SRGBTEXTURE] = 10;
IndexStateTable[11] = D3DSAMP_ELEMENTINDEX; StateIndexTable[D3DSAMP_ELEMENTINDEX] = 11;
IndexStateTable[12] = D3DSAMP_DMAPOFFSET; StateIndexTable[D3DSAMP_DMAPOFFSET] = 12;
}
void _RsHolder<ST_TextureState>::init()
{
memset( DefaultState, 0, sizeof(DefaultState));
memset( StateIndexTable, 0, sizeof(StateIndexTable) );
for( DWORD i = 0; i < MAX_TEXTURESTAGE; i++ )
{
DefaultState[i][ D3DTSS_COLOROP ] = D3DTOP_DISABLE;
DefaultState[i][ D3DTSS_COLORARG1 ] = D3DTA_TEXTURE;
DefaultState[i][ D3DTSS_COLORARG2 ] = D3DTA_CURRENT;
if( 0 == i )
DefaultState[i][ D3DTSS_ALPHAOP ] = D3DTOP_SELECTARG1; // 예외! - Stage 0 만 D3DTOP_SELECTARG1 가 Default
else
DefaultState[i][ D3DTSS_ALPHAOP ] = D3DTOP_DISABLE;
DefaultState[i][ D3DTSS_ALPHAARG1 ] = D3DTA_TEXTURE;
DefaultState[i][ D3DTSS_ALPHAARG2 ] = D3DTA_CURRENT;
DefaultState[i][ D3DTSS_BUMPENVMAT00 ] = *((DWORD*)(&RS_f_0));
DefaultState[i][ D3DTSS_BUMPENVMAT01 ] = *((DWORD*)(&RS_f_0));
DefaultState[i][ D3DTSS_BUMPENVMAT10 ] = *((DWORD*)(&RS_f_0));
DefaultState[i][ D3DTSS_BUMPENVMAT11 ] = *((DWORD*)(&RS_f_0));
DefaultState[i][ D3DTSS_TEXCOORDINDEX ] = i; // 예외! - Default 는 Stage Index와 같다.
DefaultState[i][ D3DTSS_BUMPENVLSCALE ] = *((DWORD*)(&RS_f_0));
DefaultState[i][ D3DTSS_BUMPENVLOFFSET ] = *((DWORD*)(&RS_f_0));
DefaultState[i][ D3DTSS_TEXTURETRANSFORMFLAGS ] = D3DTTFF_DISABLE;
DefaultState[i][ D3DTSS_COLORARG0 ] = D3DTA_CURRENT;
DefaultState[i][ D3DTSS_ALPHAARG0 ] = D3DTA_CURRENT;
DefaultState[i][ D3DTSS_RESULTARG ] = D3DTA_CURRENT;
DefaultState[i][ D3DTSS_CONSTANT ] = 0x00000000;
}
IndexStateTable[0] = D3DTSS_COLOROP; StateIndexTable[D3DTSS_COLOROP] = 0;
IndexStateTable[1] = D3DTSS_COLORARG1; StateIndexTable[D3DTSS_COLORARG1] = 1;
IndexStateTable[2] = D3DTSS_COLORARG2; StateIndexTable[D3DTSS_COLORARG2] = 2;
IndexStateTable[3] = D3DTSS_ALPHAOP; StateIndexTable[D3DTSS_ALPHAOP] = 3;
IndexStateTable[4] = D3DTSS_ALPHAARG1; StateIndexTable[D3DTSS_ALPHAARG1] = 4;
IndexStateTable[5] = D3DTSS_ALPHAARG2; StateIndexTable[D3DTSS_ALPHAARG2] = 5;
IndexStateTable[6] = D3DTSS_TEXCOORDINDEX; StateIndexTable[D3DTSS_TEXCOORDINDEX] = 6;
IndexStateTable[7] = D3DTSS_TEXTURETRANSFORMFLAGS; StateIndexTable[D3DTSS_TEXTURETRANSFORMFLAGS] = 7;
IndexStateTable[8] = D3DTSS_BUMPENVMAT00; StateIndexTable[D3DTSS_BUMPENVMAT00] = 8;
IndexStateTable[9] = D3DTSS_BUMPENVMAT01; StateIndexTable[D3DTSS_BUMPENVMAT01] = 9;
IndexStateTable[10] = D3DTSS_BUMPENVMAT10; StateIndexTable[D3DTSS_BUMPENVMAT10] = 10;
IndexStateTable[11] = D3DTSS_BUMPENVMAT11; StateIndexTable[D3DTSS_BUMPENVMAT11] = 11;
IndexStateTable[12] = D3DTSS_BUMPENVLSCALE; StateIndexTable[D3DTSS_BUMPENVLSCALE] = 12;
IndexStateTable[13] = D3DTSS_BUMPENVLOFFSET; StateIndexTable[D3DTSS_BUMPENVLOFFSET] = 13;
IndexStateTable[14] = D3DTSS_COLORARG0; StateIndexTable[D3DTSS_COLORARG0] = 14;
IndexStateTable[15] = D3DTSS_ALPHAARG0; StateIndexTable[D3DTSS_ALPHAARG0] = 15;
IndexStateTable[16] = D3DTSS_RESULTARG; StateIndexTable[D3DTSS_RESULTARG] = 16;
IndexStateTable[17] = D3DTSS_CONSTANT; StateIndexTable[D3DTSS_CONSTANT] = 17;
}
} // end namespace StateManager