// rastcap.h - declaration of the CRastCapRecord class // // Copyright Microsoft Corporation, 1997. // #ifndef _RASTCAP_H_ #define _RASTCAP_H_ // the current size of the rasterizer capability bit vector, in DWORDs. #define RASTCAPRECORD_SIZE 3 // sets bits in the rasterizer capability bit vector #define SET_VAL(pos, len, val) ((m_rgdwData[(pos) / 32]) |= \ (((val) & ~(0xFFFFFFFF << (len))) << \ ((pos) % 32))) // the positions and lengths of fields in the rasterizer capability bit vector // note: make sure fields do not straddle DWORD boundaries! SET_VAL cannot // currently handle that #define ZFUNC_POS 0 #define ZFUNC_LEN 8 #define ZFORMAT_POS 8 #define ZFORMAT_LEN 4 #define ZTEST_POS 12 #define ZTEST_LEN 1 #define ZWRITE_POS 13 #define ZWRITE_LEN 1 #define SHADEMODE_POS 16 #define SHADEMODE_LEN 4 #define SPECULAR_POS 20 #define SPECULAR_LEN 1 #define VERTEXFOG_POS 21 #define VERTEXFOG_LEN 1 #define MONO_POS 22 #define MONO_LEN 1 #define TEXTUREFORMAT_POS 32 #define TEXTUREFORMAT_LEN 8 #define TEXTURE_POS 40 #define TEXTURE_LEN 4 #define TEXTUREBLEND_POS 44 #define TEXTUREBLEND_LEN 4 #define TEXTUREFILTER_POS 48 #define TEXTUREFILTER_LEN 4 #define TEXTUREPERSP_POS 52 #define TEXTUREPERSP_LEN 1 #define TEXTUERBORDER_POS 53 #define TEXTUREBORDER_LEN 1 #define TEXTUREADDR_POS 54 #define TEXTUREADDR_LEN 1 #define TEXTUREMIP_POS 55 #define TEXTUREMIP_LEN 1 #define TEXTURELOD_POS 56 #define TEXTURELOD_LEN 1 #define TEXTURECOLORKEY_POS 57 #define TEXTURECOLORKEY_LEN 1 #define TEXTUREALPHAOVERRIDE_POS 58 #define TEXTUREALPHAOVERRIDE_LEN 1 #define TARGETPIXELFORMAT_POS 64 #define TARGETPIXELFORMAT_LEN 8 #define SRCBLEND_POS 72 #define SRCBLEND_LEN 4 #define DESTBLEND_POS 76 #define DESTBLEND_LEN 4 #define STIPPLE_POS 80 #define STIPPLE_LEN 1 #define DITHER_POS 81 #define DITHER_LEN 1 #define ROP_POS 82 #define ROP_LEN 1 #define BLEND_POS 83 #define BLEND_LEN 1 #define ALPHATEST_POS 84 #define ALPHATEST_LEN 1 #define ALPHABLEND_POS 85 #define ALPHABLEND_LEN 1 #define STENCIL_POS 86 #define STENCIL_LEN 1 class CRastCapRecord { friend class CRastCollection; private: DWORD m_rgdwData[RASTCAPRECORD_SIZE]; public: CRastCapRecord(void) { memset(m_rgdwData,0,RASTCAPRECORD_SIZE * sizeof(DWORD)); return; } void Set_ZTest(int iZTest) { SET_VAL(ZTEST_POS,ZTEST_LEN,iZTest); return; } void Set_ZFormat(int iZFormat) { SET_VAL(ZFORMAT_POS,ZFORMAT_LEN,iZFormat); return; } void Set_ZWrite(int iZWrite) { SET_VAL(ZWRITE_POS,ZWRITE_LEN,iZWrite); return; } void Set_ZFunc(int iZFunc) { SET_VAL(ZFUNC_POS,ZFUNC_LEN,iZFunc); return; } void Set_Stipple(int iStipple) { SET_VAL(STIPPLE_POS,STIPPLE_LEN,iStipple); return; } void Set_AlphaTest(int iAlphaTest) { SET_VAL(ALPHATEST_POS,ALPHATEST_LEN,iAlphaTest); return; } void Set_ShadeMode(int iShadeMode) { SET_VAL(SHADEMODE_POS,SHADEMODE_LEN,iShadeMode); return; } void Set_Specular(int iSpecular) { SET_VAL(SPECULAR_POS,SPECULAR_LEN,iSpecular); return; } void Set_VertexFog(int iVertexFog) { SET_VAL(VERTEXFOG_POS,VERTEXFOG_LEN,iVertexFog); return; } void Set_Texture(int iTexture) { SET_VAL(TEXTURE_POS,TEXTURE_LEN,iTexture); return; } void Set_TexturePersp(int iTexturePersp) { SET_VAL(TEXTUREPERSP_POS,TEXTUREPERSP_LEN,iTexturePersp); return; } void Set_TextureBlend(int iTextureBlend) { SET_VAL(TEXTUREBLEND_POS,TEXTUREBLEND_LEN,iTextureBlend); return; } // for now, just capture texture state for the first texture // and assume monolithics are single textured. void Set_TextureBorder(int i, int iTextureBorder) { if (i == 0) { SET_VAL(TEXTUERBORDER_POS,TEXTUREBORDER_LEN,iTextureBorder); } return; } void Set_TextureAddr(int i, int iTextureAddr) { if (i == 0) { SET_VAL(TEXTUREADDR_POS,TEXTUREADDR_LEN,iTextureAddr); } return; } void Set_TextureFilter(int i, int iTextureFilter) { if (i == 0) { SET_VAL(TEXTUREFILTER_POS,TEXTUREFILTER_LEN,iTextureFilter); } return; } void Set_TextureMip(int i, int iTextureMip) { if (i == 0) { SET_VAL(TEXTUREMIP_POS,TEXTUREMIP_LEN,iTextureMip); } return; } void Set_TextureLOD(int i, int iTextureLOD) { if (i == 0) { SET_VAL(TEXTURELOD_POS,TEXTURELOD_LEN,iTextureLOD); } return; } void Set_TextureFormat(int i, int iTextureFormat) { if (i == 0) { SET_VAL(TEXTUREFORMAT_POS,TEXTUREFORMAT_LEN,iTextureFormat); } return; } void Set_TextureColorKey(int i, int iTextureColorKey) { if (i == 0) { SET_VAL(TEXTURECOLORKEY_POS,TEXTURECOLORKEY_LEN,iTextureColorKey); } return; } void Set_TextureAlphaOverride(int i, int iTextureAlphaOverride) { if (i == 0) { SET_VAL(TEXTUREALPHAOVERRIDE_POS,TEXTUREALPHAOVERRIDE_LEN,iTextureAlphaOverride); } return; } void Set_Mono(int iMono) { SET_VAL(MONO_POS,MONO_LEN,iMono); return; } void Set_AlphaBlend(int iAlphaBlend) { SET_VAL(ALPHABLEND_POS,ALPHABLEND_LEN,iAlphaBlend); return; } void Set_Blend(int iBlend) { SET_VAL(BLEND_POS,BLEND_LEN,iBlend); return; } void Set_ROP(int iROP) { SET_VAL(ROP_POS,ROP_LEN,iROP); return; } void Set_SrcBlend(int iSrcBlend) { SET_VAL(SRCBLEND_POS,SRCBLEND_LEN,iSrcBlend); return; } void Set_DestBlend(int iDestBlend) { SET_VAL(DESTBLEND_POS,DESTBLEND_LEN,iDestBlend); return; } void Set_TargetPixelFormat(int iTargetPixelFormat) { SET_VAL(TARGETPIXELFORMAT_POS,TARGETPIXELFORMAT_LEN,iTargetPixelFormat); return; } void Set_Dither(int iDither) { SET_VAL(DITHER_POS,DITHER_LEN,iDither); return; } void Set_Stencil(int iStencil) { SET_VAL(STENCIL_POS,STENCIL_LEN,iStencil); return; } #if DBG DWORD GetCapDWord(int iNum) { return m_rgdwData[iNum]; } #endif }; #endif // _RASTCAP_H_