#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::DefaultState[1][RS_MAX]; DWORD _RsHolder::StateIndexTable[RS_MAX]; DWORD _RsHolder::IndexStateTable[RS_CNT]; DWORD _RsHolder::DefaultState[MAX_TEXTURESTAGE][SS_MAX]; DWORD _RsHolder::StateIndexTable[SS_MAX]; DWORD _RsHolder::IndexStateTable[SS_CNT]; DWORD _RsHolder::DefaultState[MAX_TEXTURESTAGE][TS_MAX]; DWORD _RsHolder::StateIndexTable[TS_MAX]; DWORD _RsHolder::IndexStateTable[TS_CNT]; void _RsHolder::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::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::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