Henri Verbeet : wined3d: Cleanup IWineD3DBaseSwapChainImpl_GetBackBuffer() a bit.

Alexandre Julliard julliard at winehq.org
Mon Aug 16 12:25:00 CDT 2010


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Sun Aug 15 23:21:44 2010 +0200

wined3d: Cleanup IWineD3DBaseSwapChainImpl_GetBackBuffer() a bit.

---

 dlls/wined3d/swapchain_base.c |   40 +++++++++++++++++++---------------------
 1 files changed, 19 insertions(+), 21 deletions(-)

diff --git a/dlls/wined3d/swapchain_base.c b/dlls/wined3d/swapchain_base.c
index f13e085..917a8b6 100644
--- a/dlls/wined3d/swapchain_base.c
+++ b/dlls/wined3d/swapchain_base.c
@@ -90,36 +90,34 @@ HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetFrontBufferData(IWineD3DSwapChain *i
     return WINED3D_OK;
 }
 
-HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetBackBuffer(IWineD3DSwapChain *iface, UINT iBackBuffer, WINED3DBACKBUFFER_TYPE Type, IWineD3DSurface **ppBackBuffer) {
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetBackBuffer(IWineD3DSwapChain *iface,
+        UINT back_buffer_idx, WINED3DBACKBUFFER_TYPE type, IWineD3DSurface **back_buffer)
+{
+    IWineD3DSwapChainImpl *swapchain = (IWineD3DSwapChainImpl *)iface;
 
-    IWineD3DSwapChainImpl *This = (IWineD3DSwapChainImpl *)iface;
+    TRACE("iface %p, back_buffer_idx %u, type %#x, back_buffer %p.\n",
+            iface, back_buffer_idx, type, back_buffer);
 
-    if (iBackBuffer > This->presentParms.BackBufferCount - 1) {
-        TRACE("Back buffer count out of range\n");
-        /* Native d3d9 doesn't set NULL here, just as wine's d3d9. But set it
-         * here in wined3d to avoid problems in other libs
-         */
-        *ppBackBuffer = NULL;
-        return WINED3DERR_INVALIDCALL;
-    }
-
-    /* Return invalid if there is no backbuffer array, otherwise it will crash when ddraw is
-     * used (there This->backBuffer is always NULL). We need this because this function has
-     * to be called from IWineD3DStateBlockImpl_InitStartupStateBlock to get the default
+    /* Return invalid if there is no backbuffer array, otherwise it will
+     * crash when ddraw is used (there swapchain->back_buffers is always NULL).
+     * We need this because this function is called from
+     * IWineD3DStateBlockImpl_InitStartupStateBlock() to get the default
      * scissorrect dimensions. */
-    if (!This->back_buffers)
+    if (!swapchain->back_buffers || back_buffer_idx >= swapchain->presentParms.BackBufferCount)
     {
-        *ppBackBuffer = NULL;
+        WARN("Invalid back buffer index.\n");
+        /* Native d3d9 doesn't set NULL here, just as wine's d3d9. But set it
+         * here in wined3d to avoid problems in other libs. */
+        *back_buffer = NULL;
         return WINED3DERR_INVALIDCALL;
     }
 
-    *ppBackBuffer = (IWineD3DSurface *)This->back_buffers[iBackBuffer];
-    TRACE("(%p) : BackBuf %d Type %d  returning %p\n", This, iBackBuffer, Type, *ppBackBuffer);
+    *back_buffer = (IWineD3DSurface *)swapchain->back_buffers[back_buffer_idx];
+    if (*back_buffer) IWineD3DSurface_AddRef(*back_buffer);
 
-    /* Note inc ref on returned surface */
-    if(*ppBackBuffer) IWineD3DSurface_AddRef(*ppBackBuffer);
-    return WINED3D_OK;
+    TRACE("Returning back buffer %p.\n", *back_buffer);
 
+    return WINED3D_OK;
 }
 
 HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetRasterStatus(IWineD3DSwapChain *iface, WINED3DRASTER_STATUS *pRasterStatus) {




More information about the wine-cvs mailing list