Henri Verbeet : d2d1: Implement d2d_d3d_render_target_GetFactory().

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 26 11:13:57 CDT 2015


Module: wine
Branch: master
Commit: 237a0ada00a0888c1068b532485ff5bc58df9980
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=237a0ada00a0888c1068b532485ff5bc58df9980

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Thu Mar 26 09:41:16 2015 +0100

d2d1: Implement d2d_d3d_render_target_GetFactory().

---

 dlls/d2d1/d2d1_private.h  |  1 +
 dlls/d2d1/render_target.c | 12 ++++++++++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h
index bbceb7f..18f26f0 100644
--- a/dlls/d2d1/d2d1_private.h
+++ b/dlls/d2d1/d2d1_private.h
@@ -50,6 +50,7 @@ struct d2d_d3d_render_target
     IDWriteTextRenderer IDWriteTextRenderer_iface;
     LONG refcount;
 
+    ID2D1Factory *factory;
     ID3D10Device *device;
     ID3D10RenderTargetView *view;
     ID3D10StateBlock *stateblock;
diff --git a/dlls/d2d1/render_target.c b/dlls/d2d1/render_target.c
index 83b4dab..15914ed 100644
--- a/dlls/d2d1/render_target.c
+++ b/dlls/d2d1/render_target.c
@@ -235,6 +235,7 @@ static ULONG STDMETHODCALLTYPE d2d_d3d_render_target_Release(ID2D1RenderTarget *
         render_target->stateblock->lpVtbl->Release(render_target->stateblock);
         ID3D10RenderTargetView_Release(render_target->view);
         ID3D10Device_Release(render_target->device);
+        ID2D1Factory_Release(render_target->factory);
         HeapFree(GetProcessHeap(), 0, render_target);
     }
 
@@ -243,9 +244,12 @@ static ULONG STDMETHODCALLTYPE d2d_d3d_render_target_Release(ID2D1RenderTarget *
 
 static void STDMETHODCALLTYPE d2d_d3d_render_target_GetFactory(ID2D1RenderTarget *iface, ID2D1Factory **factory)
 {
-    FIXME("iface %p, factory %p stub!\n", iface, factory);
+    struct d2d_d3d_render_target *render_target = impl_from_ID2D1RenderTarget(iface);
+
+    TRACE("iface %p, factory %p.\n", iface, factory);
 
-    *factory = NULL;
+    *factory = render_target->factory;
+    ID2D1Factory_AddRef(*factory);
 }
 
 static HRESULT STDMETHODCALLTYPE d2d_d3d_render_target_CreateBitmap(ID2D1RenderTarget *iface,
@@ -1361,10 +1365,13 @@ HRESULT d2d_d3d_render_target_init(struct d2d_d3d_render_target *render_target,
     render_target->ID2D1RenderTarget_iface.lpVtbl = &d2d_d3d_render_target_vtbl;
     render_target->IDWriteTextRenderer_iface.lpVtbl = &d2d_text_renderer_vtbl;
     render_target->refcount = 1;
+    render_target->factory = factory;
+    ID2D1Factory_AddRef(render_target->factory);
 
     if (FAILED(hr = IDXGISurface_GetDevice(surface, &IID_ID3D10Device, (void **)&render_target->device)))
     {
         WARN("Failed to get device interface, hr %#x.\n", hr);
+        ID2D1Factory_Release(render_target->factory);
         return hr;
     }
 
@@ -1521,5 +1528,6 @@ err:
         ID3D10RenderTargetView_Release(render_target->view);
     if (render_target->device)
         ID3D10Device_Release(render_target->device);
+    ID2D1Factory_Release(render_target->factory);
     return hr;
 }




More information about the wine-cvs mailing list