Stefan Dösinger : wined3d: Fix single buffering.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jun 26 07:11:58 CDT 2006


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

Author: Stefan Dösinger <stefandoesinger at gmx.at>
Date:   Sat Jun 24 12:32:18 2006 +0200

wined3d: Fix single buffering.

Tell gl to draw to the back buffer when a back buffer is used, do not
use the value from gl.

---

 dlls/wined3d/surface.c |   20 ++++++++------------
 1 files changed, 8 insertions(+), 12 deletions(-)

diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 25a3e7a..da8f766 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -768,7 +768,6 @@ static HRESULT WINAPI IWineD3DSurfaceImp
 
         if (backbuf || iface ==  implSwapChain->frontBuffer || iface == myDevice->renderTarget) {
             GLint  prev_store;
-            GLint  prev_draw;
             GLint  prev_depth_test;
             GLint  prev_rasterpos[4];
 
@@ -792,8 +791,6 @@ static HRESULT WINAPI IWineD3DSurfaceImp
 
             glFlush();
             vcheckGLcall("glFlush");
-            glGetIntegerv(GL_DRAW_BUFFER, &prev_draw);
-            vcheckGLcall("glIntegerv");
             glGetIntegerv(GL_PACK_SWAP_BYTES, &prev_store);
             vcheckGLcall("glIntegerv");
             glGetIntegerv(GL_CURRENT_RASTER_POSITION, &prev_rasterpos[0]);
@@ -920,8 +917,10 @@ static HRESULT WINAPI IWineD3DSurfaceImp
 
             glPixelZoom(1.0,1.0);
             vcheckGLcall("glPixelZoom");
-            glDrawBuffer(prev_draw);
-            vcheckGLcall("glDrawBuffer");
+            if(implSwapChain->backBuffer && implSwapChain->backBuffer[0]) {
+                glDrawBuffer(GL_BACK);
+                vcheckGLcall("glDrawBuffer");
+            }
             glRasterPos3iv(&prev_rasterpos[0]);
             vcheckGLcall("glRasterPos3iv");
             if(prev_depth_test) glEnable(GL_DEPTH_TEST);
@@ -2357,7 +2356,6 @@ static HRESULT IWineD3DSurfaceImpl_BltOv
         /* This is easy to handle for the D3D Device... */
         DWORD color;
         IWineD3DSwapChainImpl *implSwapChain;
-        GLint  prev_draw;
 
         TRACE("Colorfill\n");
 
@@ -2396,10 +2394,6 @@ static HRESULT IWineD3DSurfaceImpl_BltOv
             return WINED3DERR_INVALIDCALL;
         }
 
-        /* Are we drawing to the Front buffer or the back buffer? */
-        glGetIntegerv(GL_DRAW_BUFFER, &prev_draw);
-        vcheckGLcall("glIntegerv");
-
         TRACE("Calling GetSwapChain with mydevice = %p\n", myDevice);
         IWineD3DDevice_GetSwapChain((IWineD3DDevice *)myDevice, 0, (IWineD3DSwapChain **)&implSwapChain);
         IWineD3DSwapChain_Release( (IWineD3DSwapChain *) implSwapChain );
@@ -2427,8 +2421,10 @@ static HRESULT IWineD3DSurfaceImpl_BltOv
                               0 /* Stencil */);
 
         /* Restore the original draw buffer */
-        glDrawBuffer(prev_draw);
-        vcheckGLcall("glDrawBuffer");
+        if(implSwapChain->backBuffer && implSwapChain->backBuffer[0]) {
+            glDrawBuffer(GL_BACK);
+            vcheckGLcall("glDrawBuffer");
+        }
 
         return WINED3D_OK;
     }




More information about the wine-cvs mailing list