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

@ -54,6 +54,7 @@ static int SW_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
static void SW_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture);
static int SW_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture);
static int SW_UpdateViewport(SDL_Renderer * renderer);
static int SW_UpdateClipRect(SDL_Renderer * renderer);
static int SW_RenderClear(SDL_Renderer * renderer);
static int SW_RenderDrawPoints(SDL_Renderer * renderer,
const SDL_FPoint * points, int count);
@ -151,6 +152,7 @@ SW_CreateRendererForSurface(SDL_Surface * surface)
renderer->UnlockTexture = SW_UnlockTexture;
renderer->SetRenderTarget = SW_SetRenderTarget;
renderer->UpdateViewport = SW_UpdateViewport;
renderer->UpdateClipRect = SW_UpdateClipRect;
renderer->RenderClear = SW_RenderClear;
renderer->RenderDrawPoints = SW_RenderDrawPoints;
renderer->RenderDrawLines = SW_RenderDrawLines;
@ -320,6 +322,20 @@ SW_UpdateViewport(SDL_Renderer * renderer)
return 0;
}
static int
SW_UpdateClipRect(SDL_Renderer * renderer)
{
const SDL_Rect *rect = &renderer->clip_rect;
SDL_Surface* framebuffer = (SDL_Surface *) renderer->driverdata;
if (!SDL_RectEmpty(rect)) {
SDL_SetClipRect(framebuffer, rect);
} else {
SDL_SetClipRect(framebuffer, NULL);
}
return 0;
}
static int
SW_RenderClear(SDL_Renderer * renderer)
{