Henri Verbeet : wined3d: Reset render target bindings in wined3d_device_reset().

Alexandre Julliard julliard at winehq.org
Mon Jun 18 15:00:25 CDT 2012


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon Jun 18 17:19:39 2012 +0200

wined3d: Reset render target bindings in wined3d_device_reset().

---

 dlls/wined3d/device.c |   25 ++++++++++++++++++-------
 1 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index c934ced..b4ff8c8 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -5249,11 +5249,26 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
     struct wined3d_display_mode mode;
     BOOL DisplayModeChanged = FALSE;
     BOOL update_desc = FALSE;
+    unsigned int i;
     HRESULT hr;
 
     TRACE("device %p, swapchain_desc %p.\n", device, swapchain_desc);
 
+    if (FAILED(hr = wined3d_device_get_swapchain(device, 0, &swapchain)))
+    {
+        ERR("Failed to get the first implicit swapchain.\n");
+        return hr;
+    }
+
     stateblock_unbind_resources(device->stateBlock);
+    if (swapchain->back_buffers && swapchain->back_buffers[0])
+        wined3d_device_set_render_target(device, 0, swapchain->back_buffers[0], FALSE);
+    else
+        wined3d_device_set_render_target(device, 0, swapchain->front_buffer, FALSE);
+    for (i = 1; i < device->adapter->gl_info.limits.buffers; ++i)
+    {
+        wined3d_device_set_render_target(device, i, NULL, FALSE);
+    }
     wined3d_device_set_depth_stencil(device, NULL);
 
     if (device->onscreen_depth_stencil)
@@ -5266,14 +5281,10 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
     {
         TRACE("Enumerating resource %p.\n", resource);
         if (FAILED(hr = callback(resource)))
+        {
+            wined3d_swapchain_decref(swapchain);
             return hr;
-    }
-
-    hr = wined3d_device_get_swapchain(device, 0, &swapchain);
-    if (FAILED(hr))
-    {
-        ERR("Failed to get the first implicit swapchain\n");
-        return hr;
+        }
     }
 
     if (!is_display_mode_supported(device, swapchain_desc))




More information about the wine-cvs mailing list