render_local.c
changeset 13 ee426f453cf5
parent 12 43297144f196
child 17 8e8b56b0e0f5
--- a/render_local.c	Fri Jun 06 23:37:45 2008 +0300
+++ b/render_local.c	Sat Jun 07 05:05:18 2008 +0300
@@ -6,15 +6,14 @@
 #include "render_internal.h"
 #include "render_local.h"
 #include "render_png.h"
+#include "render_raw.h"
 #include "render_mandelbrot.h"
 
 int render_local (struct render *render, double *duration) {
-    assert(render->mode == RENDER_PNG);
-
     unsigned char *rowbuf = NULL;
     struct render_png *png_ctx = NULL;
+    struct render_raw *raw_ctx = NULL;
     clock_t t1, t2;
-
     
     if (duration)
         *duration = -1;
@@ -23,14 +22,34 @@
     if (!(rowbuf = malloc(render->img_w)))
         ERROR("malloc");
  
-    // the render_png stuff
-    if (!(png_ctx = render_png_init(render)))
-        ERROR("render_png_init");
-    
-    //  set render_* to use it
-    if (render_local_mem(render, &rowbuf, (int(*)(void *arg, unsigned char *)) &render_png_row, png_ctx))
-        ERROR("render_local_mem");
-   
+    // what mode?
+    switch (render->mode) {
+        case RENDER_PNG :
+            // the render_png stuff
+            if (!(png_ctx = render_png_init(render)))
+                ERROR("render_png_init");
+                
+            //  set render_* to use the render_png
+            if (render_local_mem(render, &rowbuf, (int(*)(void *arg, unsigned char *)) &render_png_row, png_ctx))
+                ERROR("render_local_mem");
+
+            break;
+
+        case RENDER_RAW :
+            // the render_raw stuff
+            if (!(raw_ctx = render_raw_init(render)))
+                ERROR("render_raw_init");
+
+            //  set render_* to use the render_raw
+            if (render_local_mem(render, &rowbuf, (int(*)(void *arg, unsigned char *)) &render_raw_row, raw_ctx))
+                ERROR("render_local_mem");
+
+            break;
+
+        default :
+            assert(0);
+    }
+  
     // then we can actually render
     t1 = clock();
 
@@ -48,7 +67,12 @@
 
 error:
     free(rowbuf);
-    free(png_ctx);
+
+    if (png_ctx)
+        render_png_abort(png_ctx);
+
+    if (raw_ctx)
+        render_raw_abort(raw_ctx);
 
     return -1;
 }