<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jun 29, 2016 at 7:21 PM, Henri Verbeet <span dir="ltr"><<a href="mailto:hverbeet@gmail.com" target="_blank">hverbeet@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>On 24 June 2016 at 23:49, Aaryaman Vasishta <<a href="mailto:jem456.vasishta@gmail.com" target="_blank">jem456.vasishta@gmail.com</a>> wrote:<br>
>  HRESULT d3drm_device_set_ddraw_device_d3d(struct d3drm_device *device, IDirect3DRM *d3drm, IDirect3D *d3d, IDirect3DDevice *d3d_device)<br>
>  {<br>
> +    IDirectDrawSurface *surface;<br>
> +    IDirect3DDevice2 *d3d_device2;<br>
> +    DDSURFACEDESC desc;<br>
> +    HRESULT hr;<br>
> +<br>
>      device->d3drm = d3drm;<br>
>      IDirect3DRM_AddRef(d3drm);<br>
>      device->device = d3d_device;<br>
>      IDirect3DDevice_AddRef(d3d_device);<br>
><br>
> +    /* Fetch render target and get width/height from there */<br>
> +    if (FAILED(hr = IDirect3DDevice_QueryInterface(d3d_device, &IID_IDirectDrawSurface, (void **)&surface)))<br>
> +    {<br>
> +        if (FAILED(hr = IDirect3DDevice_QueryInterface(d3d_device, &IID_IDirect3DDevice2, (void **)&d3d_device2)))<br>
> +            return hr;<br>
> +        hr = IDirect3DDevice2_GetRenderTarget(d3d_device2, &surface);<br>
> +        IDirect3DDevice2_Release(d3d_device2);<br>
> +        if (FAILED(hr))<br>
> +            return hr;<br>
> +    }<br>
> +<br>
> +    desc.dwSize = sizeof(desc);<br>
> +    if (FAILED(hr = IDirectDrawSurface_GetSurfaceDesc(surface, &desc)))<br>
> +    {<br>
> +        IDirectDrawSurface_Release(surface);<br>
> +        return hr;<br>
> +    }<br>
> +<br>
> +    device->width = desc.dwWidth;<br>
> +    device->height = desc.dwHeight;<br>
> +    IDirectDrawSurface_Release(surface);<br>
> +<br>
>      return IDirect3D_QueryInterface(d3d, &IID_IDirectDraw, (void **)&device->ddraw);<br>
>  }<br>
><br>
</div></div>This leaks some references (IDirect3DRM, IDirect3DDevice) on error<br>
paths, are those on purpose?<br>
<br></blockquote><div>This is a helper function, so the caller would be handling the references. See CreateDeviceFromD3D in device.c.<br><br></div><div>Cheers,<br></div><div>Aaryaman <br></div></div><br></div></div>