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

@ -116,6 +116,7 @@ static int DirectFB_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * r
static int DirectFB_RenderWritePixels(SDL_Renderer * renderer, const SDL_Rect * rect,
Uint32 format, const void * pixels, int pitch);
static int DirectFB_UpdateViewport(SDL_Renderer * renderer);
static int DirectFB_UpdateClipRect(SDL_Renderer * renderer);
static int DirectFB_SetRenderTarget(SDL_Renderer * renderer, SDL_Texture * texture);
static int PrepareDraw(SDL_Renderer * renderer);
@ -380,8 +381,6 @@ DirectFB_CreateRenderer(SDL_Window * window, Uint32 flags)
/* SetDrawColor - no needed */
renderer->RenderFillRects = DirectFB_RenderFillRects;
/* RenderDrawEllipse - no reference implementation yet */
/* RenderFillEllipse - no reference implementation yet */
renderer->RenderCopy = DirectFB_RenderCopy;
renderer->RenderPresent = DirectFB_RenderPresent;
@ -392,6 +391,7 @@ DirectFB_CreateRenderer(SDL_Window * window, Uint32 flags)
renderer->DestroyTexture = DirectFB_DestroyTexture;
renderer->DestroyRenderer = DirectFB_DestroyRenderer;
renderer->UpdateViewport = DirectFB_UpdateViewport;
renderer->UpdateClipRect = DirectFB_UpdateClipRect;
renderer->SetRenderTarget = DirectFB_SetRenderTarget;
#if 0
@ -1258,6 +1258,28 @@ DirectFB_UpdateViewport(SDL_Renderer * renderer)
return 0;
}
static int
DirectFB_UpdateClipRect(SDL_Renderer * renderer)
{
const SDL_Rect *rect = &renderer->clip_rect;
DirectFB_RenderData *data = (DirectFB_RenderData *) renderer->driverdata;
IDirectFBSurface *destsurf = get_dfb_surface(data->window);
DFBRegion region;
if (!SDL_RectEmpty(rect)) {
region.x1 = rect->x;
region.x2 = rect->x + rect->w;
region.y1 = rect->y;
region.y2 = rect->y + rect->h;
SDL_DFB_CHECKERR(destsurf->SetClip(destsurf, &region));
} else {
SDL_DFB_CHECKERR(destsurf->SetClip(destsurf, NULL));
}
return 0;
error:
return -1;
}
static int
DirectFB_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect,
Uint32 format, void * pixels, int pitch)