diff src/video/directfb/SDL_DirectFB_render.c @ 3640:58c1b9ec7074

DirectFB driver compiles again - moved to new drawing api
author Couriersud <couriersud@arcor.de>
date Mon, 11 Jan 2010 21:49:09 +0000
parents 83518f8fcd61
children 64ce267332c6
line wrap: on
line diff
--- a/src/video/directfb/SDL_DirectFB_render.c	Mon Jan 11 21:46:59 2010 +0000
+++ b/src/video/directfb/SDL_DirectFB_render.c	Mon Jan 11 21:49:09 2010 +0000
@@ -72,11 +72,14 @@
 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 @@
     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 @@
     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_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
+
+    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_RenderLine(SDL_Renderer * renderer, int x1, int y1, int x2, int y2)
+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);
-    /* 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; i++)
+    	SDL_DFB_CHECKERR(destsurf->DrawRectangle(destsurf, rects[i]->x, rects[i]->y,
+    			rects[i]->w, rects[i]->h));
+
     return 0;
   error:
     return -1;
 }
 
 static int
-DirectFB_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect)
+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);
-    SDL_DFB_CHECKERR(destsurf->FillRectangle(destsurf, rect->x, rect->y,
-                                             rect->w, rect->h));
+
+    for (i=0; i<count; i++)
+    	SDL_DFB_CHECKERR(destsurf->FillRectangle(destsurf, rects[i]->x, rects[i]->y,
+    			rects[i]->w, rects[i]->h));
 
     return 0;
   error: