[2/3] wined3d: Fix context_apply_draw_buffers() with backbuffer ORM. (try 2)

Matteo Bruni matteo.mystral at gmail.com
Wed Jun 22 07:02:16 CDT 2011


Now without changes to surface.c.
-------------- next part --------------
From ec3c08afa3ba546b3f31a9de5f2512c1df7cbb67 Mon Sep 17 00:00:00 2001
From: Matteo Bruni <mbruni at codeweavers.com>
Date: Tue, 21 Jun 2011 18:28:36 +0200
Subject: wined3d: Fix context_apply_draw_buffers() with backbuffer ORM.

---
 dlls/wined3d/context.c |   19 ++++++++++++++-----
 1 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 872ba03..a3c7c78 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -2029,8 +2029,7 @@ static void context_apply_draw_buffers(struct wined3d_context *context, DWORD rt
         }
         else
         {
-            glDrawBuffer(draw_buffer_from_rt_mask(rt_mask));
-            checkGLcall("glDrawBuffer()");
+            ERR("Unexpected draw buffers mask with backbuffer ORM.\n");
         }
     }
 }
@@ -2095,6 +2094,16 @@ static void context_validate_onscreen_formats(struct wined3d_device *device,
     context_set_render_offscreen(context, device->StateTable, TRUE);
 }
 
+static DWORD generate_rt_mask_no_fbo(struct wined3d_device *device, struct wined3d_surface *rt)
+{
+    if (!rt || rt->resource.format->id == WINED3DFMT_NULL)
+        return 0;
+    else if (rt->container.type == WINED3D_CONTAINER_SWAPCHAIN)
+        return generate_rt_mask_from_surface(rt);
+    else
+        return generate_rt_mask(device->offscreenBuffer);
+}
+
 /* Context activation is done by the caller. */
 void context_apply_blit_state(struct wined3d_context *context, struct wined3d_device *device)
 {
@@ -2123,7 +2132,7 @@ void context_apply_blit_state(struct wined3d_context *context, struct wined3d_de
     }
     else
     {
-        rt_mask = generate_rt_mask_from_surface(context->current_rt);
+        rt_mask = generate_rt_mask_no_fbo(device, context->current_rt);
     }
 
     ENTER_GL();
@@ -2203,7 +2212,7 @@ BOOL context_apply_clear_state(struct wined3d_context *context, struct wined3d_d
     }
     else
     {
-        rt_mask = generate_rt_mask_from_surface(rts[0]);
+        rt_mask = generate_rt_mask_no_fbo(device, rts[0]);
     }
 
     ENTER_GL();
@@ -2285,7 +2294,7 @@ BOOL context_apply_draw_state(struct wined3d_context *context, struct wined3d_de
     }
     else
     {
-        rt_mask = generate_rt_mask_from_surface(fb->render_targets[0]);
+        rt_mask = generate_rt_mask_no_fbo(device, fb->render_targets[0]);
     }
 
     ENTER_GL();
-- 
1.7.3.4


More information about the wine-patches mailing list