First pass on SDL render clip rect functionality

This commit is contained in:
Sam Lantinga 2013-05-04 04:46:00 -07:00
parent 0a3ab9190b
commit 866f2e5f9e
10 changed files with 227 additions and 28 deletions

View file

@ -56,6 +56,7 @@ static int GL_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
static void GL_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture);
static int GL_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture);
static int GL_UpdateViewport(SDL_Renderer * renderer);
static int GL_UpdateClipRect(SDL_Renderer * renderer);
static int GL_RenderClear(SDL_Renderer * renderer);
static int GL_RenderDrawPoints(SDL_Renderer * renderer,
const SDL_FPoint * points, int count);
@ -324,6 +325,7 @@ GL_CreateRenderer(SDL_Window * window, Uint32 flags)
renderer->UnlockTexture = GL_UnlockTexture;
renderer->SetRenderTarget = GL_SetRenderTarget;
renderer->UpdateViewport = GL_UpdateViewport;
renderer->UpdateClipRect = GL_UpdateClipRect;
renderer->RenderClear = GL_RenderClear;
renderer->RenderDrawPoints = GL_RenderDrawPoints;
renderer->RenderDrawLines = GL_RenderDrawLines;
@ -784,6 +786,21 @@ GL_UpdateViewport(SDL_Renderer * renderer)
return 0;
}
static int
GL_UpdateClipRect(SDL_Renderer * renderer)
{
const SDL_Rect *rect = &renderer->clip_rect;
GL_RenderData *data = (GL_RenderData *) renderer->driverdata;
if (!SDL_RectEmpty(rect)) {
data->glEnable(GL_SCISSOR_TEST);
data->glScissor(rect->x, rect->y, rect->x + rect->w, rect->y + rect->h);
} else {
data->glDisable(GL_SCISSOR_TEST);
}
return 0;
}
static void
GL_SetShader(GL_RenderData * data, GL_Shader shader)
{