Alexander Dorofeyev : ddraw: Set active_device in AddViewport.
Module: wine Branch: master Commit: 3e237c6199847a62c4c9f4dac12eba6f136ff08e URL: http://source.winehq.org/git/wine.git/?a=commit;h=3e237c6199847a62c4c9f4dac1... Author: Alexander Dorofeyev <alexd4(a)inbox.lv> Date: Thu Apr 10 23:11:52 2008 +0300 ddraw: Set active_device in AddViewport. --- dlls/ddraw/device.c | 2 ++ dlls/ddraw/viewport.c | 20 ++++++++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c index 4e528af..9ff24f3 100644 --- a/dlls/ddraw/device.c +++ b/dlls/ddraw/device.c @@ -817,6 +817,8 @@ IDirect3DDeviceImpl_3_AddViewport(IDirect3DDevice3 *iface, EnterCriticalSection(&ddraw_cs); vp->next = This->viewport_list; This->viewport_list = vp; + vp->active_device = This; /* Viewport must be usable for Clear() after AddViewport, + so set active_device here. */ LeaveCriticalSection(&ddraw_cs); return D3D_OK; diff --git a/dlls/ddraw/viewport.c b/dlls/ddraw/viewport.c index c720a57..90054ee 100644 --- a/dlls/ddraw/viewport.c +++ b/dlls/ddraw/viewport.c @@ -312,10 +312,12 @@ IDirect3DViewportImpl_SetViewport(IDirect3DViewport3 *iface, This->viewports.vp1.dvMaxZ = 1.0; if (This->active_device) { - IDirect3DDevice3_GetCurrentViewport(ICOM_INTERFACE(This->active_device, IDirect3DDevice3), ¤t_viewport); - if (ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, current_viewport) == This) - This->activate(This, FALSE); - if(current_viewport) IDirect3DViewport3_Release(current_viewport); + IDirect3DDevice3_GetCurrentViewport(ICOM_INTERFACE(This->active_device, IDirect3DDevice3), ¤t_viewport); + if (current_viewport) { + if (ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, current_viewport) == This) + This->activate(This, FALSE); + IDirect3DViewport3_Release(current_viewport); + } } LeaveCriticalSection(&ddraw_cs); @@ -900,10 +902,12 @@ IDirect3DViewportImpl_SetViewport2(IDirect3DViewport3 *iface, memcpy(&(This->viewports.vp2), lpData, lpData->dwSize); if (This->active_device) { - IDirect3DDevice3_GetCurrentViewport(ICOM_INTERFACE(This->active_device, IDirect3DDevice3), ¤t_viewport); - if (ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, current_viewport) == This) - This->activate(This, FALSE); - IDirect3DViewport3_Release(current_viewport); + IDirect3DDevice3_GetCurrentViewport(ICOM_INTERFACE(This->active_device, IDirect3DDevice3), ¤t_viewport); + if (current_viewport) { + if (ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, current_viewport) == This) + This->activate(This, FALSE); + IDirect3DViewport3_Release(current_viewport); + } } LeaveCriticalSection(&ddraw_cs);
participants (1)
-
Alexandre Julliard