Module: wine Branch: master Commit: f4879dcec1f3f8db997516cf1b95e7bed909a402 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f4879dcec1f3f8db997516cf1b...
Author: Henri Verbeet hverbeet@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,