Stefan Dösinger : wined3d: Use the proper drawable size when setting the scissor rect.

Alexandre Julliard julliard at winehq.org
Tue Dec 4 13:25:19 CST 2007


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

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Fri Nov 30 20:28:13 2007 +0100

wined3d: Use the proper drawable size when setting the scissor rect.

---

 dlls/wined3d/state.c |   16 ++++++----------
 1 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 787f3ea..cd801d7 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -3668,25 +3668,21 @@ static void light(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContex
 
 static void scissorrect(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext *context) {
     RECT *pRect = &stateblock->scissorRect;
-    RECT windowRect;
-    UINT winHeight;
-
-    windowRect.left = 0;
-    windowRect.top = 0;
-    windowRect.right = ((IWineD3DSurfaceImpl *) stateblock->wineD3DDevice->render_targets[0])->currentDesc.Width;
-    windowRect.bottom = ((IWineD3DSurfaceImpl *) stateblock->wineD3DDevice->render_targets[0])->currentDesc.Height;
+    UINT height;
+    UINT width;
+    IWineD3DSurfaceImpl *target = (IWineD3DSurfaceImpl *) stateblock->wineD3DDevice->render_targets[0];
 
+    target->get_drawable_size(target, &width, &height);
     /* Warning: glScissor uses window coordinates, not viewport coordinates, so our viewport correction does not apply
      * Warning2: Even in windowed mode the coords are relative to the window, not the screen
      */
-    winHeight = windowRect.bottom - windowRect.top;
-    TRACE("(%p) Setting new Scissor Rect to %d:%d-%d:%d\n", stateblock->wineD3DDevice, pRect->left, pRect->bottom - winHeight,
+    TRACE("(%p) Setting new Scissor Rect to %d:%d-%d:%d\n", stateblock->wineD3DDevice, pRect->left, pRect->bottom - height,
           pRect->right - pRect->left, pRect->bottom - pRect->top);
 
     if (stateblock->wineD3DDevice->render_offscreen) {
         glScissor(pRect->left, pRect->top, pRect->right - pRect->left, pRect->bottom - pRect->top);
     } else {
-        glScissor(pRect->left, winHeight - pRect->bottom, pRect->right - pRect->left, pRect->bottom - pRect->top);
+        glScissor(pRect->left, height - pRect->bottom, pRect->right - pRect->left, pRect->bottom - pRect->top);
     }
     checkGLcall("glScissor");
 }




More information about the wine-cvs mailing list