Aaryaman Vasishta : d3drm: Store reference to render target in IDirect3DRM*::CreateDeviceFromD3D.
Module: wine Branch: master Commit: 3987417688a5e5e9c2d38b79683e55bfeb726679 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3987417688a5e5e9c2d38b7968... Author: Aaryaman Vasishta <jem456.vasishta(a)gmail.com> Date: Wed Aug 10 21:25:02 2016 +0530 d3drm: Store reference to render target in IDirect3DRM*::CreateDeviceFromD3D. Signed-off-by: Aaryaman Vasishta <jem456.vasishta(a)gmail.com> Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/d3drm/device.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/dlls/d3drm/device.c b/dlls/d3drm/device.c index a8d646b..57fd7c0 100644 --- a/dlls/d3drm/device.c +++ b/dlls/d3drm/device.c @@ -213,7 +213,7 @@ static HRESULT d3drm_device_set_ddraw_device_d3d(struct d3drm_device *device, ID { IDirectDraw *ddraw; IDirectDrawSurface *surface; - IDirect3DDevice2 *d3d_device2; + IDirect3DDevice2 *d3d_device2 = NULL; DDSURFACEDESC desc; HRESULT hr; @@ -223,9 +223,6 @@ static HRESULT d3drm_device_set_ddraw_device_d3d(struct d3drm_device *device, ID IDirect3DRM_AddRef(device->d3drm); IDirect3DDevice_AddRef(d3d_device); - if (device->ddraw) - return D3DRMERR_BADOBJECT; - /* Fetch render target and get width/height from there */ if (FAILED(hr = IDirect3DDevice_QueryInterface(d3d_device, &IID_IDirectDrawSurface, (void **)&surface))) { @@ -237,16 +234,26 @@ static HRESULT d3drm_device_set_ddraw_device_d3d(struct d3drm_device *device, ID return hr; } + if (device->ddraw) + { + if (d3d_device2) + IDirectDrawSurface_Release(surface); + return D3DRMERR_BADOBJECT; + } + desc.dwSize = sizeof(desc); hr = IDirectDrawSurface_GetSurfaceDesc(surface, &desc); - IDirectDrawSurface_Release(surface); if (FAILED(hr)) + { + IDirectDrawSurface_Release(surface); return hr; + } device->ddraw = ddraw; device->width = desc.dwWidth; device->height = desc.dwHeight; device->device = d3d_device; + device->render_target = surface; return hr; }
participants (1)
-
Alexandre Julliard