From 0f5d7722dc607814c9f7742c130e1b484ec8cb59 Mon Sep 17 00:00:00 2001 From: Philipp Wiesemann Date: Sun, 12 May 2013 13:40:02 +0200 Subject: [PATCH] Fixed bug 1844 - glScissor calls are wrong - Patch attached Martin Gerhardy the coordinate system from sdl is not correctly transformed to the coordinate system of opengl. glScissor expects them to be a little bit different. Attached is a patch that fixes this --- src/render/opengl/SDL_render_gl.c | 3 ++- src/render/opengles/SDL_render_gles.c | 3 ++- src/render/opengles2/SDL_render_gles2.c | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/render/opengl/SDL_render_gl.c b/src/render/opengl/SDL_render_gl.c index b4d63c372..761e6de43 100644 --- a/src/render/opengl/SDL_render_gl.c +++ b/src/render/opengl/SDL_render_gl.c @@ -794,7 +794,8 @@ GL_UpdateClipRect(SDL_Renderer * renderer) if (!SDL_RectEmpty(rect)) { data->glEnable(GL_SCISSOR_TEST); - data->glScissor(rect->x, rect->h - rect->y, rect->w, rect->h); + int lowerLeft = renderer->viewport.h - rect->y - rect->h; + data->glScissor(rect->x, lowerLeft, rect->w, rect->h); } else { data->glDisable(GL_SCISSOR_TEST); } diff --git a/src/render/opengles/SDL_render_gles.c b/src/render/opengles/SDL_render_gles.c index a71a346d9..f3cf8a9c0 100644 --- a/src/render/opengles/SDL_render_gles.c +++ b/src/render/opengles/SDL_render_gles.c @@ -645,7 +645,8 @@ GLES_UpdateClipRect(SDL_Renderer * renderer) if (!SDL_RectEmpty(rect)) { data->glEnable(GL_SCISSOR_TEST); - data->glScissor(rect->x, rect->h - rect->y, rect->w, rect->h); + int lowerLeft = renderer->viewport.h - rect->y - rect->h; + data->glScissor(rect->x, lowerLeft, rect->w, rect->h); } else { data->glDisable(GL_SCISSOR_TEST); } diff --git a/src/render/opengles2/SDL_render_gles2.c b/src/render/opengles2/SDL_render_gles2.c index 3e3af7355..e2bbf4b3b 100644 --- a/src/render/opengles2/SDL_render_gles2.c +++ b/src/render/opengles2/SDL_render_gles2.c @@ -288,7 +288,8 @@ GLES2_UpdateClipRect(SDL_Renderer * renderer) if (!SDL_RectEmpty(rect)) { rdata->glEnable(GL_SCISSOR_TEST); - rdata->glScissor(rect->x, rect->h - rect->y, rect->w, rect->h); + int lowerLeft = renderer->viewport.h - rect->y - rect->h; + rdata->glScissor(rect->x, lowerLeft, rect->w, rect->h); } else { rdata->glDisable(GL_SCISSOR_TEST); }