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