author | terom@cl-543.hel-01.fi.sixxs.net |
Thu, 07 Aug 2008 20:28:06 +0300 | |
changeset 30 | 33e464fd6773 |
parent 24 | 8307d28329ae |
permissions | -rw-r--r-- |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
#include <stdlib.h> |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
2 |
#include <time.h> |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
#include <assert.h> |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
#include "common.h" |
17
8e8b56b0e0f5
a half-working render_slices. Render_multi is currently semantically broken/buggy, but it's time to go to sleep
Tero Marttila <terom@fixme.fi>
parents:
13
diff
changeset
|
6 |
#include "render_struct.h" |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
#include "render_local.h" |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
#include "render_png.h" |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
9 |
#include "render_raw.h" |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
10 |
#include "render_mandelbrot.h" |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
int render_local (struct render *render, double *duration) { |
24 | 13 |
struct render_local ctx; |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
14 |
|
24 | 15 |
if (render_local_init(&ctx, render)) |
16 |
return -1; |
|
17 |
||
18 |
int err = render_local_run(&ctx, duration); |
|
19 |
||
20 |
render_local_deinit(&ctx); |
|
21 |
||
22 |
return err; |
|
23 |
} |
|
24 |
||
25 |
int render_local_init (struct render_local *ctx, struct render *render) { |
|
26 |
// zero |
|
27 |
memset(ctx, 0, sizeof(*ctx)); |
|
28 |
||
29 |
ctx->render_info = render; |
|
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
// alloc the memory buffer |
24 | 32 |
if (!(ctx->rowbuf = malloc(render->img_w))) |
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
ERROR("malloc"); |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
35 |
// what mode? |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
36 |
switch (render->mode) { |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
37 |
case RENDER_PNG : |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
38 |
// the render_png stuff |
24 | 39 |
memset(&ctx->png_ctx, 0, sizeof(ctx->png_ctx)); |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
40 |
|
24 | 41 |
if (render_png_init(&ctx->png_ctx, render)) |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
42 |
ERROR("render_png_init"); |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
43 |
|
24 | 44 |
ctx->must_deinit = RENDER_PNG; |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
45 |
|
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
46 |
// set render_* to use the render_png |
24 | 47 |
if (render_local_mem(render, &ctx->rowbuf, (int(*)(void *arg, unsigned char *)) &render_png_row, &ctx->png_ctx)) |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
48 |
ERROR("render_local_mem"); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
49 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
50 |
break; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
51 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
52 |
case RENDER_RAW : |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
53 |
// the render_raw stuff |
24 | 54 |
memset(&ctx->raw_ctx, 0, sizeof(ctx->raw_ctx)); |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
55 |
|
24 | 56 |
if (render_raw_init(&ctx->raw_ctx, render)) |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
57 |
ERROR("render_raw_init"); |
23
31307efd7e78
new render_threads module, make node_main use it, compiles, not yet tested
Tero Marttila <terom@fixme.fi>
parents:
17
diff
changeset
|
58 |
|
24 | 59 |
ctx->must_deinit = RENDER_RAW; |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
60 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
61 |
// set render_* to use the render_raw |
24 | 62 |
if (render_local_mem(render, &ctx->rowbuf, (int(*)(void *arg, unsigned char *)) &render_raw_row, &ctx->raw_ctx)) |
13
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
63 |
ERROR("render_local_mem"); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
64 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
65 |
break; |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
66 |
|
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
67 |
default : |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
68 |
assert(0); |
ee426f453cf5
* fix some (of the) stupid things in Makefile
Tero Marttila <terom@fixme.fi>
parents:
12
diff
changeset
|
69 |
} |
24 | 70 |
|
71 |
// success |
|
72 |
return 0; |
|
73 |
||
74 |
error: |
|
75 |
render_local_deinit(ctx); |
|
76 |
||
77 |
return -1; |
|
78 |
} |
|
79 |
||
80 |
int render_local_run (struct render_local *ctx, double *duration) { |
|
81 |
clock_t t1, t2; |
|
82 |
||
83 |
if (duration) |
|
84 |
*duration = -1; |
|
85 |
||
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
86 |
// then we can actually render |
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
87 |
t1 = clock(); |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
88 |
|
24 | 89 |
if (render_mandelbrot(ctx->render_info)) |
90 |
goto error; |
|
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
91 |
|
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
92 |
t2 = clock(); |
24 | 93 |
|
94 |
// flush the PNG |
|
95 |
if (render_png_done(&ctx->png_ctx)) |
|
96 |
goto error; |
|
12
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
97 |
|
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
98 |
// calculate the time taken |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
99 |
if (duration) |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
100 |
*duration = ((double)(t2 - t1))/CLOCKS_PER_SEC; |
43297144f196
* rename files, render_file -> file_main, render_node -> node_main, mandelbrot -> render_mandelbrot
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
101 |
|
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
102 |
// success |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
103 |
return 0; |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
104 |
|
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
105 |
error: |
24 | 106 |
// caller must deinit |
107 |
// |
|
11
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
108 |
return -1; |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
109 |
} |
082bfaf38cf0
* massive structural rewrite. Split off code into several new modules (render, render_png, render_local) and updated new modules to use them.
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
110 |
|
24 | 111 |
void render_local_deinit (struct render_local *ctx) { |
112 |
free(ctx->rowbuf); |
|
113 |
||
114 |
if (ctx->must_deinit == RENDER_PNG) |
|
115 |
render_png_deinit(&ctx->png_ctx); |
|
116 |
||
117 |
else if (ctx->must_deinit == RENDER_RAW) |
|
118 |
render_raw_deinit(&ctx->raw_ctx); |
|
119 |
} |
|
120 |