Commit f7597dee authored by Stefan Dösinger's avatar Stefan Dösinger Committed by Alexandre Julliard

ddraw: Update the wined3d matrix if a current matrix handle is modified.

parent 9928a4c4
......@@ -348,6 +348,7 @@ struct IDirect3DDeviceImpl
/* Handle management */
struct HandleEntry *Handles;
DWORD numHandles;
D3DMATRIXHANDLE world, proj, view;
};
/* Vtables in various versions */
......
......@@ -1406,6 +1406,25 @@ IDirect3DDeviceImpl_1_SetMatrix(IDirect3DDevice *iface,
*((D3DMATRIX *) This->Handles[D3DMatHandle - 1].ptr) = *D3DMatrix;
if(This->world == D3DMatHandle)
{
IWineD3DDevice_SetTransform(This->wineD3DDevice,
WINED3DTS_WORLDMATRIX(0),
(WINED3DMATRIX *) D3DMatrix);
}
if(This->view == D3DMatHandle)
{
IWineD3DDevice_SetTransform(This->wineD3DDevice,
WINED3DTS_VIEW,
(WINED3DMATRIX *) D3DMatrix);
}
if(This->proj == D3DMatHandle)
{
IWineD3DDevice_SetTransform(This->wineD3DDevice,
WINED3DTS_PROJECTION,
(WINED3DMATRIX *) D3DMatrix);
}
LeaveCriticalSection(&ddraw_cs);
return D3D_OK;
}
......
......@@ -227,6 +227,12 @@ IDirect3DExecuteBufferImpl_Execute(IDirect3DExecuteBufferImpl *This,
} else if(lpDevice->Handles[ci->u2.dwArg[0] - 1].type != DDrawHandle_Matrix) {
ERR("Handle %d is not a matrix handle\n", ci->u2.dwArg[0]);
} else {
if(ci->u1.drstRenderStateType == D3DTRANSFORMSTATE_WORLD)
lpDevice->world = ci->u2.dwArg[0];
if(ci->u1.drstRenderStateType == D3DTRANSFORMSTATE_VIEW)
lpDevice->view = ci->u2.dwArg[0];
if(ci->u1.drstRenderStateType == D3DTRANSFORMSTATE_PROJECTION)
lpDevice->proj = ci->u2.dwArg[0];
IDirect3DDevice7_SetTransform(ICOM_INTERFACE(lpDevice, IDirect3DDevice7),
ci->u1.drstRenderStateType, (LPD3DMATRIX) lpDevice->Handles[ci->u2.dwArg[0] - 1].ptr);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment