diff -r b82c0f22d22a include/SDL_render.h --- a/include/SDL_render.h Wed Jun 08 08:01:21 2016 -0700 +++ b/include/SDL_render.h Thu Jun 16 13:18:59 2016 +0200 @@ -682,7 +682,8 @@ /** * \brief Clear the current rendering target with the drawing color * - * This function clears the entire rendering target, ignoring the viewport. + * This function clears the entire rendering target, ignoring the viewport and + * the clip rectangle. * * \return 0 on success, or -1 on error */ diff -r b82c0f22d22a src/render/direct3d/SDL_render_d3d.c --- a/src/render/direct3d/SDL_render_d3d.c Wed Jun 08 08:01:21 2016 -0700 +++ b/src/render/direct3d/SDL_render_d3d.c Thu Jun 16 13:18:59 2016 +0200 @@ -1307,6 +1307,10 @@ BackBufferHeight = data->pparams.BackBufferHeight; } + if (renderer->clipping_enabled) { + IDirect3DDevice9_SetRenderState(data->device, D3DRS_SCISSORTESTENABLE, FALSE); + } + /* Don't reset the viewport if we don't have to! */ if (!renderer->viewport.x && !renderer->viewport.y && renderer->viewport.w == BackBufferWidth && @@ -1336,6 +1340,10 @@ IDirect3DDevice9_SetViewport(data->device, &viewport); } + if (renderer->clipping_enabled) { + IDirect3DDevice9_SetRenderState(data->device, D3DRS_SCISSORTESTENABLE, TRUE); + } + if (FAILED(result)) { return D3D_SetError("Clear()", result); } diff -r b82c0f22d22a src/render/opengl/SDL_render_gl.c --- a/src/render/opengl/SDL_render_gl.c Wed Jun 08 08:01:21 2016 -0700 +++ b/src/render/opengl/SDL_render_gl.c Thu Jun 16 13:18:59 2016 +0200 @@ -1141,8 +1141,16 @@ (GLfloat) renderer->b * inv255f, (GLfloat) renderer->a * inv255f); + if (renderer->clipping_enabled) { + data->glDisable(GL_SCISSOR_TEST); + } + data->glClear(GL_COLOR_BUFFER_BIT); + if (renderer->clipping_enabled) { + data->glEnable(GL_SCISSOR_TEST); + } + return 0; } diff -r b82c0f22d22a src/render/opengles/SDL_render_gles.c --- a/src/render/opengles/SDL_render_gles.c Wed Jun 08 08:01:21 2016 -0700 +++ b/src/render/opengles/SDL_render_gles.c Thu Jun 16 13:18:59 2016 +0200 @@ -825,9 +825,17 @@ (GLfloat) renderer->g * inv255f, (GLfloat) renderer->b * inv255f, (GLfloat) renderer->a * inv255f); + + if (renderer->clipping_enabled) { + data->glDisable(GL_SCISSOR_TEST); + } data->glClear(GL_COLOR_BUFFER_BIT); + if (renderer->clipping_enabled) { + data->glEnable(GL_SCISSOR_TEST); + } + return 0; } diff -r b82c0f22d22a src/render/opengles2/SDL_render_gles2.c --- a/src/render/opengles2/SDL_render_gles2.c Wed Jun 08 08:01:21 2016 -0700 +++ b/src/render/opengles2/SDL_render_gles2.c Thu Jun 16 13:18:59 2016 +0200 @@ -1327,8 +1327,16 @@ data->clear_a = renderer->a; } + if (renderer->clipping_enabled) { + data->glDisable(GL_SCISSOR_TEST); + } + data->glClear(GL_COLOR_BUFFER_BIT); + if (renderer->clipping_enabled) { + data->glEnable(GL_SCISSOR_TEST); + } + return 0; }