From e18b89aca7c478603fde25278e35b7ba572ad104 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20D=C3=B6singer?= Date: Sat, 24 Jun 2006 12:32:18 +0200 Subject: [PATCH] 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 file changed, 8 insertions(+), 12 deletions(-) diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 25a3e7a2257..da8f766b5d2 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -768,7 +768,6 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_UnlockRect(IWineD3DSurface *iface) { 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 IWineD3DSurfaceImpl_UnlockRect(IWineD3DSurface *iface) { 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 IWineD3DSurfaceImpl_UnlockRect(IWineD3DSurface *iface) { 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_BltOverride(IWineD3DSurfaceImpl *This, RECT * /* 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_BltOverride(IWineD3DSurfaceImpl *This, RECT * 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_BltOverride(IWineD3DSurfaceImpl *This, RECT * 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; } -- 2.11.4.GIT