Henri Verbeet : wined3d: Introduce a function to update a swapchain' s render_to_fbo field.

Alexandre Julliard julliard at winehq.org
Tue Aug 23 12:45:00 CDT 2011


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon Aug 22 21:02:47 2011 +0200

wined3d: Introduce a function to update a swapchain's render_to_fbo field.

---

 dlls/wined3d/device.c          |   26 +---------------------
 dlls/wined3d/swapchain.c       |   46 +++++++++++++++++++++++++++++----------
 dlls/wined3d/wined3d_private.h |    1 +
 3 files changed, 36 insertions(+), 37 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 3e616da..39219bf 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -5879,31 +5879,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
 
     stateblock_init_default_state(device->stateBlock);
 
-    if(wined3d_settings.offscreen_rendering_mode == ORM_FBO)
-    {
-        RECT client_rect;
-        GetClientRect(swapchain->win_handle, &client_rect);
-
-        if(!swapchain->presentParms.BackBufferCount)
-        {
-            TRACE("Single buffered rendering\n");
-            swapchain->render_to_fbo = FALSE;
-        }
-        else if(swapchain->presentParms.BackBufferWidth  != client_rect.right  ||
-                swapchain->presentParms.BackBufferHeight != client_rect.bottom )
-        {
-            TRACE("Rendering to FBO. Backbuffer %ux%u, window %ux%u\n",
-                    swapchain->presentParms.BackBufferWidth,
-                    swapchain->presentParms.BackBufferHeight,
-                    client_rect.right, client_rect.bottom);
-            swapchain->render_to_fbo = TRUE;
-        }
-        else
-        {
-            TRACE("Rendering directly to GL_BACK\n");
-            swapchain->render_to_fbo = FALSE;
-        }
-    }
+    swapchain_update_render_to_fbo(swapchain);
 
     hr = create_primary_opengl_context(device, swapchain);
     wined3d_swapchain_decref(swapchain);
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 5ad6966..80e1f4c 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -803,6 +803,39 @@ static const struct wined3d_swapchain_ops swapchain_gdi_ops =
     swapchain_gdi_present,
 };
 
+void swapchain_update_render_to_fbo(struct wined3d_swapchain *swapchain)
+{
+    RECT client_rect;
+
+    if (wined3d_settings.offscreen_rendering_mode != ORM_FBO)
+        return;
+
+    if (!swapchain->presentParms.BackBufferCount)
+    {
+        TRACE("Single buffered rendering.\n");
+        swapchain->render_to_fbo = FALSE;
+        return;
+    }
+
+    GetClientRect(swapchain->win_handle, &client_rect);
+
+    TRACE("Backbuffer %ux%u, window %ux%u.\n",
+            swapchain->presentParms.BackBufferWidth,
+            swapchain->presentParms.BackBufferHeight,
+            client_rect.right, client_rect.bottom);
+
+    if (swapchain->presentParms.BackBufferWidth == client_rect.right
+            && swapchain->presentParms.BackBufferHeight == client_rect.bottom)
+    {
+        TRACE("Backbuffer dimensions match window dimensions, rendering onscreen.\n");
+        swapchain->render_to_fbo = FALSE;
+        return;
+    }
+
+    TRACE("Rendering to FBO.\n");
+    swapchain->render_to_fbo = TRUE;
+}
+
 /* Do not call while under the GL lock. */
 static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, WINED3DSURFTYPE surface_type,
         struct wined3d_device *device, WINED3DPRESENT_PARAMETERS *present_parameters,
@@ -885,18 +918,7 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, WINED3DSURFTY
         }
     }
     swapchain->presentParms = *present_parameters;
-
-    if (wined3d_settings.offscreen_rendering_mode == ORM_FBO
-            && present_parameters->BackBufferCount
-            && (present_parameters->BackBufferWidth != client_rect.right
-            || present_parameters->BackBufferHeight != client_rect.bottom))
-    {
-        TRACE("Rendering to FBO. Backbuffer %ux%u, window %ux%u.\n",
-                present_parameters->BackBufferWidth,
-                present_parameters->BackBufferHeight,
-                client_rect.right, client_rect.bottom);
-        swapchain->render_to_fbo = TRUE;
-    }
+    swapchain_update_render_to_fbo(swapchain);
 
     TRACE("Creating front buffer.\n");
     hr = device->device_parent->ops->create_rendertarget(device->device_parent, parent,
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index b2da2ec..813b1ea 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2441,6 +2441,7 @@ void x11_copy_to_screen(const struct wined3d_swapchain *swapchain, const RECT *r
 struct wined3d_context *swapchain_get_context(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
 void swapchain_destroy_contexts(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
 HDC swapchain_get_backup_dc(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
+void swapchain_update_render_to_fbo(struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
 
 #define DEFAULT_REFRESH_RATE 0
 




More information about the wine-cvs mailing list