[v2 PATCH] d2d1: Return device context pointer for render targets.
Henri Verbeet
hverbeet at gmail.com
Tue Sep 11 09:37:38 CDT 2018
On 10 September 2018 at 19:08, Nikolay Sivov <nsivov at codeweavers.com> wrote:
> diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h
> index e00b942797..49d1475ed4 100644
> --- a/dlls/d2d1/d2d1_private.h
> +++ b/dlls/d2d1/d2d1_private.h
> @@ -117,6 +117,15 @@ struct d2d_ps_cb
> struct d2d_brush_cb opacity_brush;
> };
>
> +typedef HRESULT (*outer_target_present_func)(const void *data);
> +
> +struct outer_target_desc
> +{
> + IUnknown *outer_unknown;
> + const void *data;
> + outer_target_present_func present;
> +};
> +
> struct d2d_device_context
> {
> ID2D1DeviceContext ID2D1DeviceContext_iface;
> @@ -124,7 +133,7 @@ struct d2d_device_context
> IDWriteTextRenderer IDWriteTextRenderer_iface;
> LONG refcount;
>
> - IUnknown *outer_unknown;
> + struct outer_target_desc outer_target;
>
> ID2D1Factory *factory;
> ID3D10Device *device;
> @@ -148,7 +157,7 @@ struct d2d_device_context
> struct d2d_clip_stack clip_stack;
> };
>
> -HRESULT d2d_d3d_create_render_target(ID2D1Factory *factory, IDXGISurface *surface, IUnknown *outer_unknown,
> +HRESULT d2d_d3d_create_render_target(ID2D1Factory *factory, IDXGISurface *surface, const struct outer_target_desc *outer,
> const D2D1_RENDER_TARGET_PROPERTIES *desc, ID2D1RenderTarget **render_target) DECLSPEC_HIDDEN;
> HRESULT d2d_d3d_render_target_create_rtv(ID2D1RenderTarget *render_target, IDXGISurface1 *surface) DECLSPEC_HIDDEN;
>
I think "data" in struct outer_target_desc is a little redundant, I
think you should be able to just pass outer_unknown to the callback.
I think I'd prefer something like the following:
struct d2d_device_context_ops
{
HRESULT (*device_context_present)(IUnknown *outer_unknown);
};
HRESULT d2d_d3d_create_render_target(ID2D1Factory *factory,
IDXGISurface *surface, IUnknown *outer_unknown,
const struct d2d_device_context_ops *ops, const
D2D1_RENDER_TARGET_PROPERTIES *desc,
ID2D1RenderTarget **render_target) DECLSPEC_HIDDEN;
mainly for consistency with D3D code.
Also, I overlooked this yesterday, but QueryInterface() on the device
context interface should also support the outer interfaces.
More information about the wine-devel
mailing list