diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4361.h b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4361.h index a01167c84..1d1ba46b5 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4361.h +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4361.h @@ -36,7 +36,7 @@ #include "OOVPA.h" -extern LOOVPA<1+10> D3DDevice_SetTextureState_TexCoordIndex_4361; +extern LOOVPA<1+10> D3DDevice_SetTextureState_TexCoordIndex_4242; extern OOVPATable D3D8_4361[]; extern uint32 D3D8_4361_SIZE; diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4361.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4361.inl index d64a08708..2f6f4501f 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4361.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4361.inl @@ -595,7 +595,7 @@ OOVPA_END; // ****************************************************************** // * D3DDevice_SetTextureState_TexCoordIndex // ****************************************************************** -OOVPA_XREF(D3DDevice_SetTextureState_TexCoordIndex, 4361, 1+10, +OOVPA_XREF(D3DDevice_SetTextureState_TexCoordIndex, 4242, 1+10, XRefNoSaveIndex, XRefOne) @@ -1242,7 +1242,7 @@ OOVPATable D3D8_4361[] = { REGISTER_OOVPA(D3DDevice_EnableOverlay, 4134, PATCH), REGISTER_OOVPA(D3DDevice_UpdateOverlay, 4361, PATCH), REGISTER_OOVPA(D3DDevice_BlockUntilVerticalBlank, 4361, PATCH), - REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4361, PATCH), + REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4242, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_VertexBlend, 4134, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 4134, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4432.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4432.inl index e15094bd0..ce6cf4615 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4432.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.4432.inl @@ -645,7 +645,7 @@ OOVPATable D3D8_4432[] { REGISTER_OOVPA(D3DDevice_SetRenderState_BackFillMode, 4134, PATCH), REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH), REGISTER_OOVPA(D3DDevice_SetTextureState_ColorKeyColor, 4134, PATCH), - REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4361, PATCH), + REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4242, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_VertexBlend, 4134, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_FrontFace, 4134, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.h b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.h index 766f94047..5642fa50a 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.h +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.h @@ -36,7 +36,9 @@ #include "OOVPA.h" +#if 0 // No longer used, replaced by generic 4034 version extern LOOVPA<2+13> D3DDevice_SetRenderState_CullMode_5233; +#endif extern OOVPATable D3D8_5233[]; extern uint32 D3D8_5233_SIZE; diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.inl index 8bb87fc52..4272f1e1b 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5233.inl @@ -123,7 +123,7 @@ OOVPA_NO_XREF(D3DDevice_CreateTexture2, 5233, 12) { 0xB2, 0xC2 }, { 0xB3, 0x1C }, OOVPA_END; - +#if 0 // No longer used, replaced by generic 4034 version // ****************************************************************** // * D3DDevice_SetRenderState_CullMode // ****************************************************************** @@ -156,6 +156,7 @@ OOVPA_XREF(D3DDevice_SetRenderState_CullMode, 5233, 2+13, { 0x55, 0x04 }, { 0x56, 0x04 }, OOVPA_END; +#endif // ****************************************************************** // * D3DDevice_SetTexture @@ -662,7 +663,7 @@ OOVPATable D3D8_5233[] = { REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH), REGISTER_OOVPA(D3DDevice_SetTextureState_ColorKeyColor, 4134, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_VertexBlend, 4134, PATCH), - REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 5233, PATCH), + REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 5028, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5344.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5344.inl index 9a06dd46a..5e8c1df98 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5344.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5344.inl @@ -1127,7 +1127,7 @@ OOVPATable D3D8_5344[] = { REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH), REGISTER_OOVPA(D3DDevice_SetTextureState_ColorKeyColor, 4134, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_VertexBlend, 4134, PATCH), - REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 5233, PATCH), + REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 5028, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl index 1f34bea92..6003aeb60 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5558.inl @@ -1722,7 +1722,7 @@ OOVPATable D3D8_5558[] = { REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4627, PATCH), REGISTER_OOVPA(D3DDevice_SetTextureState_BumpEnv, 4039, PATCH), REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH), - REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 5233, PATCH), + REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_EdgeAntiAlias, 4134, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5788.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5788.inl index 50e21d3df..1c59fc089 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5788.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5788.inl @@ -1070,7 +1070,7 @@ OOVPATable D3D8_5788[] = { REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4627, PATCH), REGISTER_OOVPA(D3DDevice_SetTextureState_BumpEnv, 4039, PATCH), REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH), - REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 5233, PATCH), + REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 5788, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl index 5ccf6bf0e..0fc68ee87 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.1.0.5849.inl @@ -192,7 +192,7 @@ OOVPATable D3D8_5849[] = { REGISTER_OOVPA(D3DDevice_SetTextureState_TexCoordIndex, 4627, PATCH), REGISTER_OOVPA(D3DDevice_SetTextureState_BumpEnv, 4039, PATCH), REGISTER_OOVPA(D3DDevice_SetTextureState_BorderColor, 4361, PATCH), - REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 5233, PATCH), + REGISTER_OOVPA(D3DDevice_SetRenderState_CullMode, 4034, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_TextureFactor, 5788, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_NormalizeNormals, 4134, PATCH), REGISTER_OOVPA(D3DDevice_SetRenderState_ZBias, 3925, PATCH), diff --git a/src/CxbxKrnl/HLEDataBase/D3D8.OOVPA.inl b/src/CxbxKrnl/HLEDataBase/D3D8.OOVPA.inl index 98371b4fe..a52296474 100644 --- a/src/CxbxKrnl/HLEDataBase/D3D8.OOVPA.inl +++ b/src/CxbxKrnl/HLEDataBase/D3D8.OOVPA.inl @@ -224,7 +224,7 @@ OOVPATable D3D8_OOVPAV2[] = { REGISTER_OOVPAS(D3DDevice_SetTextureState_BorderColor, PATCH, 3925, 4034, 4361), REGISTER_OOVPAS(D3DDevice_SetTextureState_BumpEnv, PATCH, 3925, 4039), REGISTER_OOVPAS(D3DDevice_SetTextureState_ColorKeyColor, PATCH, 3925, 4034, 4134), - REGISTER_OOVPAS(D3DDevice_SetTextureState_TexCoordIndex, PATCH, 3925, 4034, 4361, 4627), + REGISTER_OOVPAS(D3DDevice_SetTextureState_TexCoordIndex, PATCH, 3925, 4034, 4242, 4627), REGISTER_OOVPAS(D3DDevice_SetTile, PATCH, 3925, 4039, 4134, 4627, 5028, 5558, 5788), REGISTER_OOVPAS(D3DDevice_SetTransform, PATCH, 3925, 4034, 4134, 5344, 5558), // Was 4134 (from 5344's comment) REGISTER_OOVPAS(D3DDevice_SetVertexData2f, PATCH, 3925, 4039), // Was 4627 (from 5344's comment) diff --git a/src/CxbxKrnl/HLEIntercept.cpp b/src/CxbxKrnl/HLEIntercept.cpp index b4fb75bd2..1e6579476 100644 --- a/src/CxbxKrnl/HLEIntercept.cpp +++ b/src/CxbxKrnl/HLEIntercept.cpp @@ -339,10 +339,11 @@ void EmuHLEIntercept(Xbe::Header *pXbeHeader) // Skip scanning for D3D8 symbols when LLE GPU is selected if (bLLE_GPU) continue; - +#if ENABLE_LEGACY_D3D8_DB // Some 3911 titles have different D3D8 builds if (BuildVersion <= 3948) BuildVersion = 3925; +#endif } if (strcmp(LibraryName.c_str(), Lib_DSOUND) == 0) { @@ -410,6 +411,167 @@ void EmuHLEIntercept(Xbe::Header *pXbeHeader) xbaddr lower = pXbeHeader->dwBaseAddr; xbaddr upper = pXbeHeader->dwBaseAddr + pXbeHeader->dwSizeofImage; } +#ifndef ENABLE_LEGACY_D3D8_DB + else if (strcmp(LibraryName.c_str(), Lib_D3D8) == 0) + { + xbaddr lower = pXbeHeader->dwBaseAddr; + xbaddr upper = pXbeHeader->dwBaseAddr + pXbeHeader->dwSizeofImage; + xbaddr pFunc = (xbaddr)nullptr; + + if(OrigBuildVersion >= 3925 && OrigBuildVersion < 4034) + pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetRenderState_CullMode_3925, lower, upper); + else + pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetRenderState_CullMode_4034, lower, upper); + + // locate D3DDeferredRenderState + if(pFunc != (xbaddr)nullptr) + { + // offset for stencil cull enable render state in the deferred render state buffer + xbaddr DerivedAddr_D3DRS_CULLMODE = NULL; + int Decrement = 0; // TODO : Rename into something understandable + int Increment = 0; // TODO : Rename into something understandable + int patchOffset = 0; // TODO : Rename into something understandable + + // Read address of D3DRS_CULLMODE from D3DDevice_SetRenderState_CullMode + // TODO : Simplify this when XREF_D3DRS_CULLMODE derivation is deemed stable + { + if (OrigBuildVersion >= 3925 && OrigBuildVersion < 4034) + { + DerivedAddr_D3DRS_CULLMODE = *(xbaddr*)(pFunc + 0x25); + Decrement = 0x1FC; // TODO: Clean up (?) + Increment = 82 * 4; + patchOffset = 140 * 4; // Verified 3925 and 3948 + + //Decrement = 0x19F; // TODO: Clean up (?) + //Increment = 72 * 4; + //patchOffset = 142*4; // TODO: Verify + } + else if (OrigBuildVersion >= 4034 && OrigBuildVersion <= 4361) + { + DerivedAddr_D3DRS_CULLMODE = *(xbaddr*)(pFunc + 0x2B); + Decrement = 0x200; + Increment = 82 * 4; + patchOffset = 142 * 4; + } + else if (OrigBuildVersion >= 4432 && OrigBuildVersion < 4627) + { + DerivedAddr_D3DRS_CULLMODE = *(xbaddr*)(pFunc + 0x2B); + Decrement = 0x204; + Increment = 83 * 4; + patchOffset = 143 * 4; + } + else if (OrigBuildVersion >= 4627 && OrigBuildVersion <= 5933) + { + DerivedAddr_D3DRS_CULLMODE = *(xbaddr*)(pFunc + 0x2B); + Decrement = 0x24C; + Increment = 92 * 4; + patchOffset = 162 * 4; + } + + // Temporary verification - is XREF_D3DDEVICE derived correctly? + xbaddr DerivedAddr_D3DDevice = *(xbaddr*)((xbaddr)pFunc + 0x03); + if (XRefDataBase[XREF_D3DDEVICE] != DerivedAddr_D3DDevice) + { + if (XRefDataBase[XREF_D3DDEVICE] != XREF_ADDR_DERIVE) + CxbxPopupMessage("Second derived XREF_D3DDEVICE differs from first!"); + + XRefDataBase[XREF_D3DDEVICE] = DerivedAddr_D3DDevice; + } + + g_SymbolAddresses["D3DDEVICE"] = DerivedAddr_D3DDevice; + + // Temporary verification - is XREF_D3DRS_CULLMODE derived correctly? + if (XRefDataBase[XREF_D3DRS_CULLMODE] != DerivedAddr_D3DRS_CULLMODE) + { + if (XRefDataBase[XREF_D3DRS_CULLMODE] != XREF_ADDR_DERIVE) + CxbxPopupMessage("Second derived XREF_D3DRS_CULLMODE differs from first!"); + + XRefDataBase[XREF_D3DRS_CULLMODE] = DerivedAddr_D3DRS_CULLMODE; + } + } + + // Derive address of EmuD3DDeferredRenderState from D3DRS_CULLMODE + XTL::EmuD3DDeferredRenderState = (DWORD*)(DerivedAddr_D3DRS_CULLMODE - Decrement + Increment); + patchOffset -= Increment; + + // Derive address of a few other deferred render state slots (to help xref-based function location) + XRefDataBase[XREF_D3DRS_MULTISAMPLEMODE] = (xbaddr)XTL::EmuD3DDeferredRenderState + patchOffset - 8*4; + XRefDataBase[XREF_D3DRS_MULTISAMPLERENDERTARGETMODE] = (xbaddr)XTL::EmuD3DDeferredRenderState + patchOffset - 7*4; + XRefDataBase[XREF_D3DRS_STENCILCULLENABLE] = (xbaddr)XTL::EmuD3DDeferredRenderState + patchOffset + 0*4; + XRefDataBase[XREF_D3DRS_ROPZCMPALWAYSREAD] = (xbaddr)XTL::EmuD3DDeferredRenderState + patchOffset + 1*4; + XRefDataBase[XREF_D3DRS_ROPZREAD] = (xbaddr)XTL::EmuD3DDeferredRenderState + patchOffset + 2*4; + XRefDataBase[XREF_D3DRS_DONOTCULLUNCOMPRESSED] = (xbaddr)XTL::EmuD3DDeferredRenderState + patchOffset + 3*4; + + for(int v=0;v<44;v++) + { + XTL::EmuD3DDeferredRenderState[v] = XTL::X_D3DRS_UNK; + } + + g_SymbolAddresses["D3DDeferredRenderState"] = (DWORD)XTL::EmuD3DDeferredRenderState; + printf("HLE: 0x%.08X -> EmuD3DDeferredRenderState\n", XTL::EmuD3DDeferredRenderState); + //DbgPrintf("HLE: 0x%.08X -> XREF_D3DRS_ROPZCMPALWAYSREAD\n", XRefDataBase[XREF_D3DRS_ROPZCMPALWAYSREAD] ); + } + else + { + XTL::EmuD3DDeferredRenderState = nullptr; + CxbxKrnlCleanup("EmuD3DDeferredRenderState was not found!"); + } + + // locate D3DDeferredTextureState + { + pFunc = (xbaddr)nullptr; + + if(OrigBuildVersion >= 3925 && OrigBuildVersion < 4034) + pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_3925, lower, upper); + else if(OrigBuildVersion >= 4034 && OrigBuildVersion < 4242) + pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4034, lower, upper); + else if(OrigBuildVersion >= 4242 && OrigBuildVersion < 4627) + pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4242, lower, upper); + else if(OrigBuildVersion >= 4627) + pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4627, lower, upper); + + if (pFunc != (xbaddr)nullptr) + { + xbaddr DerivedAddr_D3DTSS_TEXCOORDINDEX = NULL; + int Decrement = 0x70; // TODO : Rename into something understandable + + // TODO : Remove this when XREF_D3DTSS_TEXCOORDINDEX derivation is deemed stable + { + if (OrigBuildVersion >= 3925 && OrigBuildVersion < 4034) // 0x18F180 + DerivedAddr_D3DTSS_TEXCOORDINDEX = *(xbaddr*)(pFunc + 0x11); + else if (OrigBuildVersion >= 4034 && OrigBuildVersion < 4242) + DerivedAddr_D3DTSS_TEXCOORDINDEX = *(xbaddr*)(pFunc + 0x18); + else + DerivedAddr_D3DTSS_TEXCOORDINDEX = *(xbaddr*)(pFunc + 0x19); + + // Temporary verification - is XREF_D3DTSS_TEXCOORDINDEX derived correctly? + if (XRefDataBase[XREF_D3DTSS_TEXCOORDINDEX] != DerivedAddr_D3DTSS_TEXCOORDINDEX) + { + if (XRefDataBase[XREF_D3DTSS_TEXCOORDINDEX] != XREF_ADDR_DERIVE) + CxbxPopupMessage("Second derived XREF_D3DTSS_TEXCOORDINDEX differs from first!"); + + XRefDataBase[XREF_D3DTSS_TEXCOORDINDEX] = DerivedAddr_D3DTSS_TEXCOORDINDEX; + } + } + + XTL::EmuD3DDeferredTextureState = (DWORD*)(DerivedAddr_D3DTSS_TEXCOORDINDEX - Decrement); + + for(int s=0;s<4;s++) + { + for(int v=0;v<32;v++) + XTL::EmuD3DDeferredTextureState[v+s*32] = X_D3DTSS_UNK; + } + + g_SymbolAddresses["D3DDeferredTextureState"] = (DWORD)XTL::EmuD3DDeferredTextureState; + printf("HLE: 0x%.08X -> EmuD3DDeferredTextureState\n", XTL::EmuD3DDeferredTextureState); + } + else + { + XTL::EmuD3DDeferredTextureState = nullptr; + CxbxKrnlCleanup("EmuD3DDeferredTextureState was not found!"); + } + } +#else else if (strcmp(LibraryName.c_str(), Lib_D3D8) == 0 && (BuildVersion == 3925 || BuildVersion == 4034 || BuildVersion == 4134 || BuildVersion == 4361 || BuildVersion == 4432 || BuildVersion == 4627 || BuildVersion == 5028 || BuildVersion == 5233 @@ -544,7 +706,7 @@ void EmuHLEIntercept(Xbe::Header *pXbeHeader) else if(BuildVersion == 4034 || BuildVersion == 4134) pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4034, lower, upper); else if(BuildVersion == 4361 || BuildVersion == 4432) - pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4361, lower, upper); + pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4242, lower, upper); else if(BuildVersion == 4627 || BuildVersion == 5028 || BuildVersion == 5233 || BuildVersion == 5344 || BuildVersion == 5558 || BuildVersion == 5788 || BuildVersion == 5849) pFunc = EmuLocateFunction((OOVPA*)&D3DDevice_SetTextureState_TexCoordIndex_4627, lower, upper); @@ -591,6 +753,7 @@ void EmuHLEIntercept(Xbe::Header *pXbeHeader) CxbxKrnlCleanup("EmuD3DDeferredTextureState was not found!"); } } +#endif } }