diff --git a/src/CxbxKrnl/EmuD3D8.cpp b/src/CxbxKrnl/EmuD3D8.cpp index 418132190..b9ef39ab6 100644 --- a/src/CxbxKrnl/EmuD3D8.cpp +++ b/src/CxbxKrnl/EmuD3D8.cpp @@ -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; } diff --git a/src/CxbxKrnl/EmuD3D8/VertexBuffer.cpp b/src/CxbxKrnl/EmuD3D8/VertexBuffer.cpp index 7643a6d61..c65c538ea 100755 --- a/src/CxbxKrnl/EmuD3D8/VertexBuffer.cpp +++ b/src/CxbxKrnl/EmuD3D8/VertexBuffer.cpp @@ -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; diff --git a/src/CxbxKrnl/EmuD3D8/VertexBuffer.h b/src/CxbxKrnl/EmuD3D8/VertexBuffer.h index 97c725af3..78240a5c7 100755 --- a/src/CxbxKrnl/EmuD3D8/VertexBuffer.h +++ b/src/CxbxKrnl/EmuD3D8/VertexBuffer.h @@ -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();