Fix vertex diffuse colors not initializing properly/use proper diffuse values.

This commit is contained in:
Voxel 2018-08-12 13:04:20 +01:00
parent 46f900f88c
commit 9c3a3e8d58
3 changed files with 17 additions and 8 deletions

View File

@ -4068,12 +4068,12 @@ VOID WINAPI XTL::EMUPATCH(D3DDevice_SetVertexData4f)
FUNC_EXPORTS
LOG_FUNC_BEGIN
LOG_FUNC_ARG(Register)
LOG_FUNC_ARG(a)
LOG_FUNC_ARG(b)
LOG_FUNC_ARG(c)
LOG_FUNC_ARG(d)
LOG_FUNC_END;
LOG_FUNC_ARG(Register)
LOG_FUNC_ARG(a)
LOG_FUNC_ARG(b)
LOG_FUNC_ARG(c)
LOG_FUNC_ARG(d)
LOG_FUNC_END;
HRESULT hRet = D3D_OK;
@ -4113,6 +4113,12 @@ VOID WINAPI XTL::EMUPATCH(D3DDevice_SetVertexData4f)
g_InlineVertexBuffer_Table[o].Position.z = c;
g_InlineVertexBuffer_Table[o].Rhw = d; // Was : 1.0f; // Dxbx note : Why set Rhw to 1.0? And why ignore d?
if (o > 0 && g_InlineVertexBuffer_DiffuseFlag == 0) {
g_InlineVertexBuffer_Table[o].Diffuse = g_InlineVertexBuffer_Table[o - 1].Diffuse;
}
g_InlineVertexBuffer_DiffuseFlag = 0;
switch (g_InlineVertexBuffer_FVF & D3DFVF_POSITION_MASK) {
case 0:
// No position mask given yet, set it now :
@ -4189,8 +4195,9 @@ VOID WINAPI XTL::EMUPATCH(D3DDevice_SetVertexData4f)
case X_D3DVSDE_DIFFUSE:
{
g_InlineVertexBuffer_Table[o].Diffuse = D3DCOLOR_COLORVALUE(a, b, c, d);
g_InlineVertexBuffer_Table[o].Diffuse = D3DCOLOR_COLORVALUE(a, b, c, d);
g_InlineVertexBuffer_FVF |= D3DFVF_DIFFUSE;
g_InlineVertexBuffer_DiffuseFlag = 1;
break;
}

View File

@ -60,6 +60,7 @@ extern DWORD XTL::g_InlineVertexBuffer_FVF = 0;
extern struct XTL::_D3DIVB *XTL::g_InlineVertexBuffer_Table = nullptr;
extern UINT XTL::g_InlineVertexBuffer_TableLength = 0;
extern UINT XTL::g_InlineVertexBuffer_TableOffset = 0;
extern UINT XTL::g_InlineVertexBuffer_DiffuseFlag = 0;
FLOAT *g_InlineVertexBuffer_pData = nullptr;
UINT g_InlineVertexBuffer_DataSize = 0;

View File

@ -118,7 +118,8 @@ extern struct _D3DIVB
*g_InlineVertexBuffer_Table;
extern UINT g_InlineVertexBuffer_TableLength;
extern UINT g_InlineVertexBuffer_TableOffset;
extern UINT g_InlineVertexBuffer_TableOffset;
extern UINT g_InlineVertexBuffer_DiffuseFlag;
extern VOID EmuFlushIVB();