Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
Fixes OpenGL* Clip Rect functions (by Emmanuel Gil Peyrot)
  • Loading branch information
gabomdq committed May 10, 2013
1 parent 3d6c7d3 commit 0910c13
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/render/opengl/SDL_render_gl.c
Expand Up @@ -794,7 +794,7 @@ GL_UpdateClipRect(SDL_Renderer * renderer)

if (!SDL_RectEmpty(rect)) {
data->glEnable(GL_SCISSOR_TEST);
data->glScissor(rect->x, rect->y, rect->x + rect->w, rect->y + rect->h);
data->glScissor(rect->x, rect->h - rect->y, rect->x, rect->y);
} else {
data->glDisable(GL_SCISSOR_TEST);
}
Expand Down
1 change: 1 addition & 0 deletions src/render/opengles/SDL_glesfuncs.h
Expand Up @@ -20,6 +20,7 @@ SDL_PROC(void, glMatrixMode, (GLenum))
SDL_PROC(void, glOrthof, (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat))
SDL_PROC(void, glPixelStorei, (GLenum, GLint))
SDL_PROC(void, glReadPixels, (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid*))
SDL_PROC(void, glScissor, (GLint, GLint, GLsizei, GLsizei))
SDL_PROC(void, glTexCoordPointer, (GLint, GLenum, GLsizei, const GLvoid *))
SDL_PROC(void, glTexEnvf, (GLenum, GLenum, GLfloat))
SDL_PROC(void, glTexImage2D, (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *))
Expand Down
12 changes: 9 additions & 3 deletions src/render/opengles/SDL_render_gles.c
Expand Up @@ -635,13 +635,19 @@ GLES_UpdateViewport(SDL_Renderer * renderer)
static int
GLES_UpdateClipRect(SDL_Renderer * renderer)
{
GLES_RenderData *data = (GLES_RenderData *) renderer->driverdata;
const SDL_Rect *rect = &renderer->clip_rect;

if (SDL_CurrentContext != data->context) {
/* We'll update the clip rect after we rebind the context */
return 0;
}

if (!SDL_RectEmpty(rect)) {
glEnable(GL_SCISSOR_TEST);
glScissor(rect->x, rect->y, rect->x + rect->w, rect->y + rect->h);
data->glEnable(GL_SCISSOR_TEST);
data->glScissor(rect->x, rect->h - rect->y, rect->w, rect->h);
} else {
glDisable(GL_SCISSOR_TEST);
data->glDisable(GL_SCISSOR_TEST);
}
return 0;
}
Expand Down
1 change: 1 addition & 0 deletions src/render/opengles2/SDL_gles2funcs.h
Expand Up @@ -30,6 +30,7 @@ SDL_PROC(GLint, glGetUniformLocation, (GLuint, const char *))
SDL_PROC(void, glLinkProgram, (GLuint))
SDL_PROC(void, glPixelStorei, (GLenum, GLint))
SDL_PROC(void, glReadPixels, (GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLvoid*))
SDL_PROC(void, glScissor, (GLint, GLint, GLsizei, GLsizei))
SDL_PROC(void, glShaderBinary, (GLsizei, const GLuint *, GLenum, const void *, GLsizei))
SDL_PROC(void, glShaderSource, (GLuint, GLsizei, const char **, const GLint *))
SDL_PROC(void, glTexImage2D, (GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, const void *))
Expand Down
12 changes: 9 additions & 3 deletions src/render/opengles2/SDL_render_gles2.c
Expand Up @@ -278,13 +278,19 @@ GLES2_UpdateViewport(SDL_Renderer * renderer)
static int
GLES2_UpdateClipRect(SDL_Renderer * renderer)
{
GLES2_DriverContext *rdata = (GLES2_DriverContext *)renderer->driverdata;
const SDL_Rect *rect = &renderer->clip_rect;

if (SDL_CurrentContext != rdata->context) {
/* We'll update the clip rect after we rebind the context */
return 0;
}

if (!SDL_RectEmpty(rect)) {
glEnable(GL_SCISSOR_TEST);
glScissor(rect->x, rect->y, rect->x + rect->w, rect->y + rect->h);
rdata->glEnable(GL_SCISSOR_TEST);
rdata->glScissor(rect->x, rect->h - rect->y, rect->w, rect->h);
} else {
glDisable(GL_SCISSOR_TEST);
rdata->glDisable(GL_SCISSOR_TEST);
}
return 0;
}
Expand Down

0 comments on commit 0910c13

Please sign in to comment.