--- 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;
}