Henri Verbeet : dxgi: Implement IDXGISwapChain::GetBuffer().

Alexandre Julliard julliard at winehq.org
Tue Feb 24 10:21:32 CST 2009


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Tue Feb 24 07:43:02 2009 +0100

dxgi: Implement IDXGISwapChain::GetBuffer().

---

 dlls/dxgi/swapchain.c |   29 +++++++++++++++++++++++++++--
 1 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c
index 3e9e444..af8bb0a 100644
--- a/dlls/dxgi/swapchain.c
+++ b/dlls/dxgi/swapchain.c
@@ -164,10 +164,35 @@ static HRESULT STDMETHODCALLTYPE dxgi_swapchain_Present(IDXGISwapChain *iface, U
 static HRESULT STDMETHODCALLTYPE dxgi_swapchain_GetBuffer(IDXGISwapChain *iface,
         UINT buffer_idx, REFIID riid, void **surface)
 {
-    FIXME("iface %p, buffer_idx %u, riid %s, surface %p stub!\n",
+    struct dxgi_swapchain *This = (struct dxgi_swapchain *)iface;
+    IWineD3DSurface *backbuffer;
+    IUnknown *parent;
+    HRESULT hr;
+
+    TRACE("iface %p, buffer_idx %u, riid %s, surface %p\n",
             iface, buffer_idx, debugstr_guid(riid), surface);
 
-    return E_NOTIMPL;
+    EnterCriticalSection(&dxgi_cs);
+
+    hr = IWineD3DSwapChain_GetBackBuffer(This->wined3d_swapchain, buffer_idx, WINED3DBACKBUFFER_TYPE_MONO, &backbuffer);
+    if (FAILED(hr))
+    {
+        LeaveCriticalSection(&dxgi_cs);
+        return hr;
+    }
+
+    hr = IWineD3DSurface_GetParent(backbuffer, &parent);
+    IWineD3DSurface_Release(backbuffer);
+    LeaveCriticalSection(&dxgi_cs);
+    if (FAILED(hr))
+    {
+        return hr;
+    }
+
+    hr = IUnknown_QueryInterface(parent, riid, surface);
+    IUnknown_Release(parent);
+
+    return hr;
 }
 
 static HRESULT STDMETHODCALLTYPE dxgi_swapchain_SetFullscreenState(IDXGISwapChain *iface,




More information about the wine-cvs mailing list