_Begin/_End etc work

This commit is contained in:
Aaron Robinson 2004-04-18 22:22:57 +00:00
parent c1669099c3
commit 03813735fd
8 changed files with 212 additions and 157 deletions

BIN
Cxbx.opt

Binary file not shown.

View File

@ -124,10 +124,12 @@ class VertexPatcher
// inline vertex buffer emulation // inline vertex buffer emulation
extern DWORD *g_pIVBVertexBuffer; extern DWORD *g_pIVBVertexBuffer;
extern X_D3DPRIMITIVETYPE g_IVBPrimitiveType; extern X_D3DPRIMITIVETYPE g_IVBPrimitiveType;
extern DWORD g_IVBFVF;
extern struct _D3DIVB extern struct _D3DIVB
{ {
XTL::D3DXVECTOR3 Position; // Position XTL::D3DXVECTOR3 Position; // Position
FLOAT Rhw; // Rhw
XTL::DWORD dwSpecular; // Specular XTL::DWORD dwSpecular; // Specular
XTL::DWORD dwDiffuse; // Diffuse XTL::DWORD dwDiffuse; // Diffuse
XTL::D3DXVECTOR3 Normal; // Normal XTL::D3DXVECTOR3 Normal; // Normal

View File

@ -1628,6 +1628,17 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_CopyRects
GetCurrentThreadId(), pSourceSurface, pSourceRectsArray, cRects, GetCurrentThreadId(), pSourceSurface, pSourceRectsArray, cRects,
pDestinationSurface, pDestPointsArray); pDestinationSurface, pDestPointsArray);
pSourceSurface->EmuSurface8->UnlockRect();
/*
static int kthx = 0;
char fileName[255];
sprintf(fileName, "C:\\Aaron\\Textures\\SourceSurface-%d.bmp", kthx++);
D3DXSaveSurfaceToFile(fileName, D3DXIFF_BMP, pSourceSurface->EmuSurface8, NULL, NULL);
//*/
HRESULT hRet = g_pD3DDevice8->CopyRects HRESULT hRet = g_pD3DDevice8->CopyRects
( (
pSourceSurface->EmuSurface8, pSourceSurface->EmuSurface8,
@ -3137,31 +3148,10 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_Begin
// allocate a max of 32 entries // allocate a max of 32 entries
g_IVBTable = (struct XTL::_D3DIVB*)CxbxMalloc(sizeof(XTL::_D3DIVB)*32); g_IVBTable = (struct XTL::_D3DIVB*)CxbxMalloc(sizeof(XTL::_D3DIVB)*32);
g_IVBTblOffs = 0; g_IVBTblOffs = 0;
g_IVBFVF = 0;
// default values // default values
for(int v=0;v<32;v++) ZeroMemory(g_IVBTable, sizeof(XTL::_D3DIVB)*32);
{
g_IVBTable[v].Position.x = 0;
g_IVBTable[v].Position.y = 0;
g_IVBTable[v].Position.z = 0;
g_IVBTable[v].Normal.x = 0;
g_IVBTable[v].Normal.y = 0;
g_IVBTable[v].Normal.z = 0;
g_IVBTable[v].dwDiffuse = 0x00000000;
g_IVBTable[v].dwSpecular = 0x00000000;
g_IVBTable[v].TexCoord1.x = 0;
g_IVBTable[v].TexCoord1.y = 0;
g_IVBTable[v].TexCoord2.x = 0;
g_IVBTable[v].TexCoord2.y = 0;
g_IVBTable[v].TexCoord3.x = 0;
g_IVBTable[v].TexCoord3.y = 0;
g_IVBTable[v].TexCoord4.x = 0;
g_IVBTable[v].TexCoord4.y = 0;
}
DWORD dwShader = -1;
g_pD3DDevice8->GetVertexShader(&dwShader);
g_pIVBVertexBuffer = (DWORD*)CxbxMalloc(sizeof(struct XTL::_D3DIVB)*32); g_pIVBVertexBuffer = (DWORD*)CxbxMalloc(sizeof(struct XTL::_D3DIVB)*32);
@ -3198,6 +3188,9 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_SetVertexData2f
return EmuIDirect3DDevice8_SetVertexData4f(Register, a, b, 0.0f, 1.0f); return EmuIDirect3DDevice8_SetVertexData4f(Register, a, b, 0.0f, 1.0f);
} }
static inline DWORD FtoDW(FLOAT f) { return *((DWORD*)&f); }
static inline FLOAT DWtoF(DWORD f) { return *((FLOAT*)&f); }
// ****************************************************************** // ******************************************************************
// * func: EmuIDirect3DDevice8_SetVertexData4f // * func: EmuIDirect3DDevice8_SetVertexData4f
// ****************************************************************** // ******************************************************************
@ -3226,7 +3219,22 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_SetVertexData4f
switch(Register) switch(Register)
{ {
case 9: case 3: // D3DVSDE_DIFFUSE
{
int o = g_IVBTblOffs;
DWORD ca = FtoDW(d) << 24;
DWORD cr = FtoDW(a) << 16;
DWORD cg = FtoDW(b) << 8;
DWORD cb = FtoDW(c) << 0;
g_IVBTable[o].dwDiffuse = ca | cr | cg | cb;
g_IVBFVF |= D3DFVF_DIFFUSE;
}
break;
case 9: // D3DVSDE_TEXCOORD0
{ {
int o = g_IVBTblOffs; int o = g_IVBTblOffs;
@ -3238,6 +3246,11 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_SetVertexData4f
g_IVBTable[o].TexCoord1.x = a; g_IVBTable[o].TexCoord1.x = a;
g_IVBTable[o].TexCoord1.y = b; g_IVBTable[o].TexCoord1.y = b;
if( (g_IVBFVF & D3DFVF_TEXCOUNT_MASK) < D3DFVF_TEX1)
{
g_IVBFVF |= D3DFVF_TEX1;
}
} }
break; break;
@ -3245,8 +3258,8 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_SetVertexData4f
{ {
int o = g_IVBTblOffs; int o = g_IVBTblOffs;
// a = (a/320.0f) - 1.0f; a = (a/320.0f) - 1.0f;
// b = (b/240.0f) - 1.0f; b = (b/240.0f) - 1.0f;
g_IVBTable[o].Position.x = a; g_IVBTable[o].Position.x = a;
g_IVBTable[o].Position.y = b; g_IVBTable[o].Position.y = b;
@ -3254,6 +3267,8 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_SetVertexData4f
g_IVBTblOffs++; g_IVBTblOffs++;
g_IVBFVF |= D3DFVF_XYZ;
EmuFlushIVB(); EmuFlushIVB();
} }
break; break;
@ -3267,9 +3282,6 @@ HRESULT WINAPI XTL::EmuIDirect3DDevice8_SetVertexData4f
return hRet; return hRet;
} }
static inline DWORD FtoDW(FLOAT f) { return *((DWORD*)&f); }
static inline FLOAT DWtoF(DWORD f) { return *((FLOAT*)&f); }
// ****************************************************************** // ******************************************************************
// * func: EmuIDirect3DDevice8_SetVertexDataColor // * func: EmuIDirect3DDevice8_SetVertexDataColor
// ****************************************************************** // ******************************************************************

View File

@ -385,38 +385,12 @@ void XTL::EmuExecutePushBuffer
{ {
#endif #endif
if(!g_bPBSkipPusher) if(!g_bPBSkipPusher && IsValidCurrentShader())
{ {
if(IsValidCurrentShader()) g_pD3DDevice8->DrawIndexedPrimitive
{ (
//g_pD3DDevice8->SetVertexShader(D3DFVF_XYZ | D3DFVF_TEX0); PCPrimitiveType, 0, /*dwCount*2*/8*1024*1024, 0, PrimitiveCount
);
/* these don't help the turok lighting problems :[
g_pD3DDevice8->SetRenderState(D3DRS_LIGHTING, FALSE);
g_pD3DDevice8->SetRenderState(D3DRS_FOGENABLE, FALSE);
g_pD3DDevice8->SetRenderState(D3DRS_FOGTABLEMODE, D3DFOG_NONE);
g_pD3DDevice8->SetRenderState(D3DRS_SPECULARENABLE, FALSE);
g_pD3DDevice8->SetRenderState(D3DRS_ZVISIBLE, FALSE);
g_pD3DDevice8->SetRenderState(D3DRS_RANGEFOGENABLE, FALSE);
g_pD3DDevice8->SetRenderState(D3DRS_AMBIENT, RGB(255,125,125));
g_pD3DDevice8->SetRenderState(D3DRS_AMBIENTMATERIALSOURCE, D3DMCS_COLOR1);
D3DMATERIAL8 mtrl;
ZeroMemory( &mtrl, sizeof(D3DMATERIAL8) );
mtrl.Diffuse.r = mtrl.Ambient.r = mtrl.Specular.r = 1.0f;
mtrl.Diffuse.g = mtrl.Ambient.g = mtrl.Specular.r = 0.0f;
mtrl.Diffuse.b = mtrl.Ambient.b = mtrl.Specular.r = 0.0f;
mtrl.Diffuse.a = mtrl.Ambient.a = mtrl.Specular.r = 1.0f;
g_pD3DDevice8->SetMaterial(&mtrl);
//*/
g_pD3DDevice8->DrawIndexedPrimitive
(
PCPrimitiveType, 0, /*dwCount*2*/8*1024*1024, 0, PrimitiveCount
);
}
} }
#ifdef _DEBUG_TRACK_PB #ifdef _DEBUG_TRACK_PB

View File

@ -49,6 +49,7 @@ XTL::DWORD *XTL::g_pIVBVertexBuffer = 0;
XTL::X_D3DPRIMITIVETYPE XTL::g_IVBPrimitiveType = XTL::X_D3DPT_INVALID; XTL::X_D3DPRIMITIVETYPE XTL::g_IVBPrimitiveType = XTL::X_D3DPT_INVALID;
UINT XTL::g_IVBTblOffs = 0; UINT XTL::g_IVBTblOffs = 0;
struct XTL::_D3DIVB *XTL::g_IVBTable = 0; struct XTL::_D3DIVB *XTL::g_IVBTable = 0;
extern DWORD XTL::g_IVBFVF = 0;
static unsigned int crctab[256]; static unsigned int crctab[256];
@ -937,146 +938,90 @@ bool XTL::VertexPatcher::Restore()
VOID XTL::EmuFlushIVB() VOID XTL::EmuFlushIVB()
{ {
if((g_IVBPrimitiveType == X_D3DPT_QUADSTRIP) && (g_IVBTblOffs == 4)) if((g_IVBPrimitiveType == X_D3DPT_QUADLIST) && (g_IVBTblOffs == 4))
{ {
DWORD dwShader = -1; XTL::EmuUpdateDeferredStates();
DWORD *pdwVB = g_pIVBVertexBuffer;
g_pD3DDevice8->GetVertexShader(&dwShader); DWORD *pdwVB = (DWORD*)g_IVBTable;
UINT uiStride = 0; UINT uiStride = 0;
for(int v=0;v<4;v++) for(int v=0;v<4;v++)
{ {
DWORD dwPos = dwShader & D3DFVF_POSITION_MASK; DWORD dwPos = g_IVBFVF & D3DFVF_POSITION_MASK;
if(dwPos == D3DFVF_XYZRHW) if(dwPos == D3DFVF_XYZ)
{ {
*(FLOAT*)pdwVB++ = g_IVBTable[v].Position.x; *(FLOAT*)pdwVB++ = g_IVBTable[v].Position.x;
*(FLOAT*)pdwVB++ = g_IVBTable[v].Position.y; *(FLOAT*)pdwVB++ = g_IVBTable[v].Position.y;
*(FLOAT*)pdwVB++ = g_IVBTable[v].Position.z; *(FLOAT*)pdwVB++ = g_IVBTable[v].Position.z;
uiStride += (sizeof(FLOAT)*3); if(v == 0)
{
uiStride += (sizeof(FLOAT)*3);
}
DbgPrintf("IVB Position := {%f, %f, %f}\n", g_IVBTable[v].Position.x, g_IVBTable[v].Position.y, g_IVBTable[v].Position.z); DbgPrintf("IVB Position := {%f, %f, %f}\n", g_IVBTable[v].Position.x, g_IVBTable[v].Position.y, g_IVBTable[v].Position.z);
} }
else else
{ {
EmuCleanup("Unsupported Position Mask (FVF := 0x%.08X)", dwShader); EmuCleanup("Unsupported Position Mask (FVF := 0x%.08X)", g_IVBFVF);
} }
if(dwShader & D3DFVF_NORMAL) if(g_IVBFVF & D3DFVF_DIFFUSE)
{
*(FLOAT*)pdwVB++ = g_IVBTable[v].Normal.x;
*(FLOAT*)pdwVB++ = g_IVBTable[v].Normal.y;
*(FLOAT*)pdwVB++ = g_IVBTable[v].Normal.z;
uiStride += sizeof(FLOAT)*3;
DbgPrintf("IVB Normal := {%f, %f, %f}\n", g_IVBTable[v].Normal.x, g_IVBTable[v].Normal.y, g_IVBTable[v].Normal.z);
}
if(dwShader & D3DFVF_DIFFUSE)
{ {
*(DWORD*)pdwVB++ = g_IVBTable[v].dwDiffuse; *(DWORD*)pdwVB++ = g_IVBTable[v].dwDiffuse;
if(v == 0)
{
uiStride += sizeof(DWORD);
}
DbgPrintf("IVB Diffuse := 0x%.08X\n", g_IVBTable[v].dwDiffuse); DbgPrintf("IVB Diffuse := 0x%.08X\n", g_IVBTable[v].dwDiffuse);
} }
if(dwShader & D3DFVF_SPECULAR) DWORD dwTexN = (g_IVBFVF & D3DFVF_TEXCOUNT_MASK) >> D3DFVF_TEXCOUNT_SHIFT;
{
*(DWORD*)pdwVB++ = g_IVBTable[v].dwSpecular;
uiStride += sizeof(DWORD);
DbgPrintf("IVB Specular := 0x%.08X\n", g_IVBTable[v].dwSpecular);
}
DWORD dwTexN = (dwShader & D3DFVF_TEXCOUNT_MASK) >> D3DFVF_TEXCOUNT_SHIFT;
if(dwTexN >= 1) if(dwTexN >= 1)
{ {
*(FLOAT*)pdwVB++ = g_IVBTable[v].TexCoord1.x; *(FLOAT*)pdwVB++ = g_IVBTable[v].TexCoord1.x;
*(FLOAT*)pdwVB++ = g_IVBTable[v].TexCoord1.y; *(FLOAT*)pdwVB++ = g_IVBTable[v].TexCoord1.y;
uiStride += sizeof(FLOAT)*2; if(v == 0)
{
uiStride += sizeof(FLOAT)*2;
}
DbgPrintf("IVB TexCoord1 := {%f, %f}\n", g_IVBTable[v].TexCoord1.x, g_IVBTable[v].TexCoord1.y); DbgPrintf("IVB TexCoord1 := {%f, %f}\n", g_IVBTable[v].TexCoord1.x, g_IVBTable[v].TexCoord1.y);
} }
if(dwTexN >= 2)
{
*(FLOAT*)pdwVB++ = g_IVBTable[v].TexCoord2.x;
*(FLOAT*)pdwVB++ = g_IVBTable[v].TexCoord2.y;
uiStride += sizeof(FLOAT)*2;
DbgPrintf("IVB TexCoord2 := {%f, %f}\n", g_IVBTable[v].TexCoord2.x, g_IVBTable[v].TexCoord2.y);
}
if(dwTexN >= 3)
{
*(FLOAT*)pdwVB++ = g_IVBTable[v].TexCoord3.x;
*(FLOAT*)pdwVB++ = g_IVBTable[v].TexCoord3.y;
uiStride += sizeof(FLOAT)*2;
DbgPrintf("IVB TexCoord3 := {%f, %f}\n", g_IVBTable[v].TexCoord3.x, g_IVBTable[v].TexCoord3.y);
}
if(dwTexN >= 4)
{
*(FLOAT*)pdwVB++ = g_IVBTable[v].TexCoord4.x;
*(FLOAT*)pdwVB++ = g_IVBTable[v].TexCoord4.y;
uiStride += sizeof(FLOAT)*2;
DbgPrintf("IVB TexCoord4 := {%f, %f}\n", g_IVBTable[v].TexCoord4.x, g_IVBTable[v].TexCoord4.y);
}
} }
/* g_pD3DDevice8->SetVertexShader(g_IVBFVF);
static XTL::IDirect3DTexture8 *pTexture = 0; g_pD3DDevice8->SetPixelShader(NULL);
if(pTexture == 0) // patch buffer
{ UINT PrimitiveCount = EmuD3DVertex2PrimitiveCount(g_IVBPrimitiveType, 4);
g_pD3DDevice8->CreateTexture(512, 512, 1, 0, D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &pTexture);
IDirect3DSurface8 *pSurface = 0;; VertexPatchDesc VPDesc;
pTexture->GetSurfaceLevel(0, &pSurface); VPDesc.dwVertexCount = 4;
VPDesc.PrimitiveType = g_IVBPrimitiveType;
VPDesc.dwPrimitiveCount = PrimitiveCount;
VPDesc.dwOffset = 0;
VPDesc.pVertexStreamZeroData = g_IVBTable;
VPDesc.uiVertexStreamZeroStride = uiStride;
// TODO: Set the current shader and let the patcher handle it..
VPDesc.hVertexShader = g_IVBFVF;
D3DXLoadSurfaceFromFileA(pSurface, NULL, NULL, "C:\\texture.bmp", NULL, D3DX_FILTER_NONE, 0, NULL); VertexPatcher VertPatch;
pSurface->Release(); bool bPatched = VertPatch.Apply(&VPDesc);
}
g_pD3DDevice8->SetTexture(0, pTexture); g_pD3DDevice8->DrawPrimitiveUP(D3DPT_TRIANGLELIST, VPDesc.dwPrimitiveCount, VPDesc.pVertexStreamZeroData, VPDesc.uiVertexStreamZeroStride);
//*/
/* VertPatch.Restore();
IDirect3DBaseTexture8 *pTexture = 0;
g_pD3DDevice8->GetTexture(0, &pTexture);
if(pTexture != NULL)
{
static int dwDumpTexture = 0;
char szBuffer[255];
sprintf(szBuffer, "C:\\Aaron\\Textures\\Texture-Active%.03d.bmp", dwDumpTexture++);
D3DXSaveTextureToFile(szBuffer, D3DXIFF_BMP, pTexture, NULL);
}
//*/
XTL::EmuUpdateDeferredStates();
g_pD3DDevice8->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, g_pIVBVertexBuffer, uiStride);
g_pD3DDevice8->Present(0,0,0,0);
// ignore
g_IVBTblOffs = 0; g_IVBTblOffs = 0;
} }

View File

@ -726,6 +726,9 @@ BOOL WINAPI XTL::EmuSetThreadPriority
if(bRet == FALSE) if(bRet == FALSE)
EmuWarning("SetThreadPriority Failed!"); EmuWarning("SetThreadPriority Failed!");
// HACK!
Sleep(10);
EmuSwapFS(); // XBox FS EmuSwapFS(); // XBox FS
return bRet; return bRet;

View File

@ -493,6 +493,29 @@ SOOVPA<12> IDirect3DDevice8_SetShaderConstantMode_1_0_4627 =
} }
}; };
// ******************************************************************
// * IDirect3DDevice8_CopyRects
// ******************************************************************
SOOVPA<8> IDirect3DDevice8_CopyRects_1_0_4627 =
{
0, // Large == 0
8, // Count == 8
-1, // XRef Not Saved
0, // XRef Not Used
{
{ 0x1E, 0x57 },
{ 0x3E, 0xF6 },
{ 0x5E, 0x00 },
{ 0x7E, 0x01 },
{ 0x9E, 0x00 },
{ 0xBE, 0x0C },
{ 0xDE, 0xF7 },
{ 0xFE, 0x00 },
}
};
// ****************************************************************** // ******************************************************************
// * IDirect3DDevice8_GetBackBuffer2 // * IDirect3DDevice8_GetBackBuffer2
// ****************************************************************** // ******************************************************************
@ -3013,6 +3036,16 @@ OOVPATable D3D8_1_0_4627[] =
"EmuIDirect3D8_KickOffAndWaitForIdle2" "EmuIDirect3D8_KickOffAndWaitForIdle2"
#endif #endif
}, },
// IDirect3DDevice8::CopyRects
{
(OOVPA*)&IDirect3DDevice8_CopyRects_1_0_4627,
XTL::EmuIDirect3DDevice8_CopyRects,
#ifdef _DEBUG_TRACE
"EmuIDirect3DDevice8_CopyRects"
#endif
},
// IDirect3DDevice8::GetBackBuffer2 // IDirect3DDevice8::GetBackBuffer2
{ {
(OOVPA*)&IDirect3DDevice8_GetBackBuffer2_1_0_4627, (OOVPA*)&IDirect3DDevice8_GetBackBuffer2_1_0_4627,

View File

@ -237,6 +237,72 @@ SOOVPA<7> IDirect3DDevice8_SetPixelShader_1_0_5849 =
} }
}; };
// ******************************************************************
// * IDirect3DDevice8_SetVertexData4f
// ******************************************************************
SOOVPA<17> IDirect3DDevice8_SetVertexData4f_1_0_5849 =
{
0, // Large == 0
7, // Count == 7
-1, // XRef Not Saved
0, // XRef Not Used
{
{ 0x0A, 0x46 },
{ 0x16, 0x08 },
{ 0x22, 0x09 },
{ 0x2E, 0x24 },
{ 0x3A, 0x24 },
{ 0x46, 0x8B },
{ 0x52, 0x14 },
}
};
// ******************************************************************
// * IDirect3DDevice8_SetVertexDataColor
// ******************************************************************
SOOVPA<17> IDirect3DDevice8_SetVertexDataColor_1_0_5849 =
{
0, // Large == 0
7, // Count == 7
-1, // XRef Not Saved
0, // XRef Not Used
{
{ 0x08, 0x06 },
{ 0x14, 0x8B },
{ 0x1C, 0x19 },
{ 0x26, 0xB6 },
{ 0x30, 0x00 },
{ 0x3A, 0xFF },
{ 0x44, 0x08 },
}
};
// ******************************************************************
// * IDirect3DDevice8_End
// ******************************************************************
SOOVPA<17> IDirect3DDevice8_End_1_0_5849 =
{
0, // Large == 0
7, // Count == 7
-1, // XRef Not Saved
0, // XRef Not Used
{
{ 0x07, 0x8B },
{ 0x13, 0xC7 },
{ 0x19, 0xC7 },
{ 0x22, 0x08 },
{ 0x2B, 0xE1 },
{ 0x34, 0x4E },
{ 0x40, 0xC3 },
}
};
// ****************************************************************** // ******************************************************************
// * IDirect3DDevice8_SetRenderState_CullMode // * IDirect3DDevice8_SetRenderState_CullMode
// ****************************************************************** // ******************************************************************
@ -646,9 +712,9 @@ OOVPATable D3D8_1_0_5849[] =
"EmuIDirect3DDevice8_SetVertexData2f" "EmuIDirect3DDevice8_SetVertexData2f"
#endif #endif
}, },
// IDirect3DDevice8::SetVertexData4f (* unchanged since 4627 *) // IDirect3DDevice8::SetVertexData4f
{ {
(OOVPA*)&IDirect3DDevice8_SetVertexData4f_1_0_4627, (OOVPA*)&IDirect3DDevice8_SetVertexData4f_1_0_5849,
XTL::EmuIDirect3DDevice8_SetVertexData4f, XTL::EmuIDirect3DDevice8_SetVertexData4f,
@ -656,6 +722,26 @@ OOVPATable D3D8_1_0_5849[] =
"EmuIDirect3DDevice8_SetVertexData4f" "EmuIDirect3DDevice8_SetVertexData4f"
#endif #endif
}, },
// IDirect3DDevice8::SetVertexDataColor
{
(OOVPA*)&IDirect3DDevice8_SetVertexDataColor_1_0_5849,
XTL::EmuIDirect3DDevice8_SetVertexDataColor,
#ifdef _DEBUG_TRACE
"EmuIDirect3DDevice8_SetVertexDataColor"
#endif
},
// IDirect3DDevice8::End
{
(OOVPA*)&IDirect3DDevice8_End_1_0_5849,
XTL::EmuIDirect3DDevice8_End,
#ifdef _DEBUG_TRACE
"EmuIDirect3DDevice8_End"
#endif
},
// IDirect3DDevice8::SetTextureState_TexCoordIndex (* unchanged since 4627 *) // IDirect3DDevice8::SetTextureState_TexCoordIndex (* unchanged since 4627 *)
{ {
(OOVPA*)&IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_4627, (OOVPA*)&IDirect3DDevice8_SetTextureState_TexCoordIndex_1_0_4627,