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