author | Tero Marttila <terom@fixme.fi> |
Wed, 27 Aug 2008 10:11:44 +0300 | |
changeset 39 | 0e21a65074a6 |
parent 22 | 4627760fc0d1 |
permissions | -rw-r--r-- |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
#include "common.h" |
18
86f2e5b7191b
render_multi uses render_slices now, and seems to work
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
3 |
#include "render_struct.h" |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
#include "render_mandelbrot.h" |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
#define DETAIL 255 |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
#define absdelta(a, b) (a>b ? a-b : b-a) |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
int render_mandelbrot (struct render *ctx) { |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
// render algorithm vars |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
u_int32_t img_x, img_y; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
double x0, y0, x, y, _x, _y, w_scale, h_scale; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
u_int8_t iter; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
// calcluate the scale factors |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
w_scale = ctx->img_w/absdelta(ctx->x1, ctx->x2); |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
h_scale = ctx->img_h/absdelta(ctx->y1, ctx->y2); |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
// start rendering! |
22
4627760fc0d1
add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents:
18
diff
changeset
|
21 |
for (img_y=ctx->img_top; img_y < ctx->img_bottom; img_y += ctx->img_y_step) { |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
// render the current row |
22
4627760fc0d1
add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents:
18
diff
changeset
|
23 |
for (img_x=ctx->img_left; img_x < ctx->img_right; img_x += ctx->img_x_step) { |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
x = 0; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
y = 0; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
x0 = img_x/w_scale + ctx->x1; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
y0 = img_y/h_scale + ctx->y1; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
iter = DETAIL; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
while (x*x + y*y < (2*2) && iter > 0) { |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
_x = x*x - y*y + x0; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
_y = 2*x*y + y0; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
x = _x; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
y = _y; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
iter--; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
} |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
|
22
4627760fc0d1
add img_{left,right,top,bottom} and img_{x,y}_step to struct render and change render_mandelbrot/slices to use them
Tero Marttila <terom@fixme.fi>
parents:
18
diff
changeset
|
40 |
(*ctx->local_rowbuf_addr)[img_x - ctx->img_left] = iter; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
} |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
// row cb |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
if (ctx->local_row_fn(ctx->cb_arg, (*ctx->local_rowbuf_addr))) |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
ERROR("local_row_fn"); |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
} |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
// return succesfully |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
return 0; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
51 |
error: |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
return -1; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
} |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
54 |