[2/2] wined3d: Flip the scissor rect when rendering offscreen
H. Verbeet
hverbeet at gmail.com
Wed Jul 25 17:38:50 CDT 2007
Since we render everything upside down, the scissor rect should be
flipped as well.
Changelog:
- Flip the scissor rect when rendering offscreen
-------------- next part --------------
---
dlls/wined3d/context.c | 2 ++
dlls/wined3d/device.c | 17 ++++++++++++-----
dlls/wined3d/state.c | 7 ++++++-
3 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 32791b7..1c5abd0 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -700,6 +700,7 @@ static inline WineD3DContext *FindContext(IWineD3DDeviceImpl *This, IWineD3DSurf
Context_MarkStateDirty(context, WINED3DTS_PROJECTION);
Context_MarkStateDirty(context, STATE_VDECL);
Context_MarkStateDirty(context, STATE_VIEWPORT);
+ Context_MarkStateDirty(context, STATE_SCISSORRECT);
}
} else {
@@ -787,6 +788,7 @@ static inline WineD3DContext *FindContext(IWineD3DDeviceImpl *This, IWineD3DSurf
Context_MarkStateDirty(context, WINED3DTS_PROJECTION);
Context_MarkStateDirty(context, STATE_VDECL);
Context_MarkStateDirty(context, STATE_VIEWPORT);
+ Context_MarkStateDirty(context, STATE_SCISSORRECT);
}
}
if (readTexture) {
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 0bdb753..3ccd7ad 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -4522,11 +4522,18 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Clear(IWineD3DDevice *iface, DWORD Coun
if (!curRect) {
/* In drawable flag is set below */
- glScissor(This->stateBlock->viewport.X,
- (((IWineD3DSurfaceImpl *)This->render_targets[0])->currentDesc.Height -
- (This->stateBlock->viewport.Y + This->stateBlock->viewport.Height)),
- This->stateBlock->viewport.Width,
- This->stateBlock->viewport.Height);
+ if (This->render_offscreen) {
+ glScissor(This->stateBlock->viewport.X,
+ This->stateBlock->viewport.Y,
+ This->stateBlock->viewport.Width,
+ This->stateBlock->viewport.Height);
+ } else {
+ glScissor(This->stateBlock->viewport.X,
+ (((IWineD3DSurfaceImpl *)This->render_targets[0])->currentDesc.Height -
+ (This->stateBlock->viewport.Y + This->stateBlock->viewport.Height)),
+ This->stateBlock->viewport.Width,
+ This->stateBlock->viewport.Height);
+ }
checkGLcall("glScissor");
glClear(glMask);
checkGLcall("glClear");
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index 3d6101d..71a6916 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -3442,7 +3442,12 @@ static void scissorrect(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3D
winHeight = windowRect.bottom - windowRect.top;
TRACE("(%p) Setting new Scissor Rect to %d:%d-%d:%d\n", stateblock->wineD3DDevice, pRect->left, pRect->bottom - winHeight,
pRect->right - pRect->left, pRect->bottom - pRect->top);
- glScissor(pRect->left, winHeight - pRect->bottom, 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);
+ }
checkGLcall("glScissor");
}
More information about the wine-patches
mailing list