add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
authorTero Marttila <terom@fixme.fi>
Tue, 17 Jun 2008 19:08:05 +0300
changeset 22 4627760fc0d1
parent 21 e2916f8ebaa6
child 23 31307efd7e78
add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them

committer: Tero Marttila <terom@fixme.fi>
render.c
render_mandelbrot.c
render_slices.c
render_struct.h
--- a/render.c	Tue Jun 17 18:15:43 2008 +0300
+++ b/render.c	Tue Jun 17 19:08:05 2008 +0300
@@ -39,6 +39,12 @@
     ctx->img_w = img_w;
     ctx->img_h = img_h;
 
+    // default render region...
+    ctx->img_left = ctx->img_top = 0;
+    ctx->img_right = img_w;
+    ctx->img_bottom = img_h;
+    ctx->img_x_step = ctx->img_y_step = 1;
+
     return 0;
 }
 
--- a/render_mandelbrot.c	Tue Jun 17 18:15:43 2008 +0300
+++ b/render_mandelbrot.c	Tue Jun 17 19:08:05 2008 +0300
@@ -18,9 +18,9 @@
     h_scale = ctx->img_h/absdelta(ctx->y1, ctx->y2);
     
     // start rendering!
-    for (img_y=0; img_y < ctx->img_h; img_y++) {
+    for (img_y=ctx->img_top; img_y < ctx->img_bottom; img_y += ctx->img_y_step) {
         // render the current row
-        for (img_x=0; img_x < ctx->img_w; img_x++) {
+        for (img_x=ctx->img_left; img_x < ctx->img_right; img_x += ctx->img_x_step) {
             x = 0;
             y = 0;
             x0 = img_x/w_scale + ctx->x1;
@@ -37,7 +37,7 @@
                 iter--;
             }
             
-            (*ctx->local_rowbuf_addr)[img_x] = iter;
+            (*ctx->local_rowbuf_addr)[img_x - ctx->img_left] = iter;
         }
 
         // row cb
--- a/render_slices.c	Tue Jun 17 18:15:43 2008 +0300
+++ b/render_slices.c	Tue Jun 17 19:08:05 2008 +0300
@@ -42,19 +42,26 @@
     ctx->done_row = -1;
 
     assert(RENDER_SLICES_MAX >= 2);
-
+    
+    // should probably use memcpy instead...
     if (
             render_init         (&ctx->slices[0].render_info,   RENDER_RAW)
          || render_init         (&ctx->slices[1].render_info,   RENDER_RAW)
 
-         || render_set_size     (&ctx->slices[0].render_info,   render->img_w / 2,                      render->img_h)
-         || render_set_size     (&ctx->slices[1].render_info,   render->img_w / 2 + render->img_w % 2,  render->img_h)
+         || render_set_size     (&ctx->slices[0].render_info,   render->img_w,  render->img_h)
+         || render_set_size     (&ctx->slices[1].render_info,   render->img_w,  render->img_h)
 
-         || render_region_raw   (&ctx->slices[0].render_info,   render->x1,                     render->y1, HALF(render->x1, render->x2),   render->y2)
-         || render_region_raw   (&ctx->slices[1].render_info,   HALF(render->x1, render->x2),   render->y1, render->x2,                     render->y2)
+         || render_region_raw   (&ctx->slices[0].render_info,   render->x1, render->y1, render->x2, render->y2)
+         || render_region_raw   (&ctx->slices[1].render_info,   render->x1, render->y1, render->x2, render->y2)
     )
         ERROR("render_{init,set_size,set_region_raw}");
- 
+    
+    // set the offsets
+    ctx->slices[0].render_info.img_left = 0;
+    ctx->slices[0].render_info.img_right = render->img_w / 2;
+    ctx->slices[1].render_info.img_left = render->img_w / 2;
+    ctx->slices[1].render_info.img_right = render->img_w;
+
     // allocate the rowbuf
     if (!(ctx->rowbuf = malloc(render->img_w * 2)))
         ERROR("malloc");
--- a/render_struct.h	Tue Jun 17 18:15:43 2008 +0300
+++ b/render_struct.h	Tue Jun 17 19:08:05 2008 +0300
@@ -17,6 +17,10 @@
     double      x2;
     double      y2;
 
+/* render region */
+    u_int32_t img_left, img_right, img_top, img_bottom;
+    u_int32_t img_x_step, img_y_step;
+
 /* local rendering */
     unsigned char **local_rowbuf_addr;
     render_ctx_row_cb local_row_fn;