On Wed, Jun 29, 2016 at 7:21 PM, Henri Verbeet hverbeet@gmail.com wrote:
On 24 June 2016 at 23:49, Aaryaman Vasishta jem456.vasishta@gmail.com wrote:
HRESULT d3drm_device_set_ddraw_device_d3d(struct d3drm_device *device,
IDirect3DRM *d3drm, IDirect3D *d3d, IDirect3DDevice *d3d_device)
{
IDirectDrawSurface *surface;
IDirect3DDevice2 *d3d_device2;
DDSURFACEDESC desc;
HRESULT hr;
device->d3drm = d3drm; IDirect3DRM_AddRef(d3drm); device->device = d3d_device; IDirect3DDevice_AddRef(d3d_device);
/* Fetch render target and get width/height from there */
if (FAILED(hr = IDirect3DDevice_QueryInterface(d3d_device,
&IID_IDirectDrawSurface, (void **)&surface)))
- {
if (FAILED(hr = IDirect3DDevice_QueryInterface(d3d_device,
&IID_IDirect3DDevice2, (void **)&d3d_device2)))
return hr;
hr = IDirect3DDevice2_GetRenderTarget(d3d_device2, &surface);
IDirect3DDevice2_Release(d3d_device2);
if (FAILED(hr))
return hr;
- }
- desc.dwSize = sizeof(desc);
- if (FAILED(hr = IDirectDrawSurface_GetSurfaceDesc(surface, &desc)))
- {
IDirectDrawSurface_Release(surface);
return hr;
- }
- device->width = desc.dwWidth;
- device->height = desc.dwHeight;
- IDirectDrawSurface_Release(surface);
- return IDirect3D_QueryInterface(d3d, &IID_IDirectDraw, (void
**)&device->ddraw);
}
This leaks some references (IDirect3DRM, IDirect3DDevice) on error paths, are those on purpose?
This is a helper function, so the caller would be handling the references.
See CreateDeviceFromD3D in device.c.
Cheers, Aaryaman