Module: wine Branch: master Commit: 8689fe32c6602c55a5cc275834ac26b51eba616c URL: http://source.winehq.org/git/wine.git/?a=commit;h=8689fe32c6602c55a5cc275834...
Author: Stefan Dösinger stefan@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"); }