From 0d746a2b64e6d20f08535a6d81f0336825b21731 Mon Sep 17 00:00:00 2001 From: Couriersud Date: Mon, 11 Jan 2010 21:49:09 +0000 Subject: [PATCH] DirectFB driver compiles again - moved to new drawing api --- src/video/directfb/SDL_DirectFB_modes.c | 1 + src/video/directfb/SDL_DirectFB_render.c | 66 ++++++++++++++++++------ 2 files changed, 50 insertions(+), 17 deletions(-) diff --git a/src/video/directfb/SDL_DirectFB_modes.c b/src/video/directfb/SDL_DirectFB_modes.c index 7e2e1adc6..fdf407d30 100644 --- a/src/video/directfb/SDL_DirectFB_modes.c +++ b/src/video/directfb/SDL_DirectFB_modes.c @@ -387,6 +387,7 @@ DirectFB_GetDisplayModes(_THIS, SDL_VideoDisplay * display) } SDL_DFB_FREE(data.modelist); +error: return; } diff --git a/src/video/directfb/SDL_DirectFB_render.c b/src/video/directfb/SDL_DirectFB_render.c index 4a906b4ed..ee4221404 100644 --- a/src/video/directfb/SDL_DirectFB_render.c +++ b/src/video/directfb/SDL_DirectFB_render.c @@ -72,11 +72,14 @@ static void DirectFB_UnlockTexture(SDL_Renderer * renderer, static void DirectFB_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture, int numrects, const SDL_Rect * rects); -static int DirectFB_RenderPoint(SDL_Renderer * renderer, int x, int y); -static int DirectFB_RenderLine(SDL_Renderer * renderer, int x1, int y1, - int x2, int y2); -static int DirectFB_RenderFill(SDL_Renderer * renderer, - const SDL_Rect * rect); +static int DirectFB_RenderDrawPoints(SDL_Renderer * renderer, + const SDL_Point * points, int count); +static int DirectFB_RenderDrawLines(SDL_Renderer * renderer, + const SDL_Point * points, int count); +static int DirectFB_RenderDrawRects(SDL_Renderer * renderer, + const SDL_Rect ** rects, int count); +static int DirectFB_RenderFillRects(SDL_Renderer * renderer, + const SDL_Rect ** rects, int count); static int DirectFB_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, const SDL_Rect * srcrect, @@ -301,9 +304,10 @@ DirectFB_CreateRenderer(SDL_Window * window, Uint32 flags) renderer->LockTexture = DirectFB_LockTexture; renderer->UnlockTexture = DirectFB_UnlockTexture; renderer->DirtyTexture = DirectFB_DirtyTexture; - renderer->RenderPoint = DirectFB_RenderPoint; - renderer->RenderLine = DirectFB_RenderLine; - renderer->RenderFill = DirectFB_RenderFill; + renderer->RenderDrawPoints = DirectFB_RenderDrawPoints; + renderer->RenderDrawLines = DirectFB_RenderDrawLines; + renderer->RenderFillRects = DirectFB_RenderFillRects; + renderer->RenderDrawRects = DirectFB_RenderDrawRects; renderer->RenderCopy = DirectFB_RenderCopy; renderer->RenderPresent = DirectFB_RenderPresent; renderer->DestroyTexture = DirectFB_DestroyTexture; @@ -857,48 +861,76 @@ PrepareDraw(SDL_Renderer * renderer) return -1; } -static int -DirectFB_RenderPoint(SDL_Renderer * renderer, int x, int y) +static int DirectFB_RenderDrawPoints(SDL_Renderer * renderer, + const SDL_Point * points, int count) { DirectFB_RenderData *data = (DirectFB_RenderData *) renderer->driverdata; SDL_DFB_WINDOWSURFACE(data->window); DFBResult ret; + int i; PrepareDraw(renderer); - SDL_DFB_CHECKERR(destsurf->DrawLine(destsurf, x, y, x, y)); + for (i=0; i < count; i++) + SDL_DFB_CHECKERR(destsurf->DrawLine(destsurf, points[i].x, points[i].y, points[i].x, points[i].y)); return 0; error: return -1; } -static int -DirectFB_RenderLine(SDL_Renderer * renderer, int x1, int y1, int x2, int y2) +static int DirectFB_RenderDrawLines(SDL_Renderer * renderer, + const SDL_Point * points, int count) { DirectFB_RenderData *data = (DirectFB_RenderData *) renderer->driverdata; SDL_DFB_WINDOWSURFACE(data->window); DFBResult ret; + int i; PrepareDraw(renderer); /* Use antialiasing when available */ #if (DFB_VERSION_ATLEAST(1,2,0)) SDL_DFB_CHECKERR(destsurf->SetRenderOptions(destsurf, DSRO_ANTIALIAS)); #endif - SDL_DFB_CHECKERR(destsurf->DrawLine(destsurf, x1, y1, x2, y2)); + + for (i=0; i < count - 1; i++) + SDL_DFB_CHECKERR(destsurf->DrawLine(destsurf, points[i].x, points[i].y, points[i+1].x, points[i+1].y)); + return 0; error: return -1; } static int -DirectFB_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect) +DirectFB_RenderDrawRects(SDL_Renderer * renderer, const SDL_Rect ** rects, int count) { DirectFB_RenderData *data = (DirectFB_RenderData *) renderer->driverdata; SDL_DFB_WINDOWSURFACE(data->window); DFBResult ret; + int i; PrepareDraw(renderer); - SDL_DFB_CHECKERR(destsurf->FillRectangle(destsurf, rect->x, rect->y, - rect->w, rect->h)); + + for (i=0; iDrawRectangle(destsurf, rects[i]->x, rects[i]->y, + rects[i]->w, rects[i]->h)); + + return 0; + error: + return -1; +} + +static int +DirectFB_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects, int count) +{ + DirectFB_RenderData *data = (DirectFB_RenderData *) renderer->driverdata; + SDL_DFB_WINDOWSURFACE(data->window); + DFBResult ret; + int i; + + PrepareDraw(renderer); + + for (i=0; iFillRectangle(destsurf, rects[i]->x, rects[i]->y, + rects[i]->w, rects[i]->h)); return 0; error: