author | Tero Marttila <terom@fixme.fi> |
Sat, 31 May 2008 02:22:27 +0300 | |
changeset 1 | 6aa1a0d1f88d |
child 2 | 69f8c0acaac7 |
permissions | -rw-r--r-- |
1
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
#ifndef RENDER_H |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
#define RENDER_H |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
#include <sys/types.h> |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
#include <stdio.h> |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
/* |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
* This module provides various ways to render mandelbrot images in various formats |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
*/ |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
// custom I/O callbacks function signatures |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
typedef int (*render_ctx_write_cb)(const unsigned char *data, size_t length, void *arg); |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
typedef int (*render_ctx_flush_cb)(void *arg); |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
// callback return codes |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
#define RENDER_CB_OK 0 |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
#define RENDER_CB_ERR 1 |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
#define RENDER_OK 0 |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
#define RENDER_ERR 1 |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
// output types |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
enum { |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
RENDER_RAW, // raw pixel data |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
RENDER_PNG, // a png image |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
}; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
typedef struct render_ctx { |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
/* render mode */ |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
int mode; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
/* image size */ |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
u_int32_t img_w; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
u_int32_t img_h; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
/* mandelbrot region */ |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
double x1; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
double y1; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
double x2; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
double y2; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
/* I/O parameters */ |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
// if this is non-NULL, use libpng's normal IO on this stream |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
FILE *io_stream; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
// called to handle the output data |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
render_ctx_write_cb io_write_fn; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
// called when the output data should be flushed - can be safely ignored if not needed |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
render_ctx_flush_cb io_flush_fn; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
51 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
// the callback argument |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
void *io_cb_arg; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
54 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
55 |
// error status |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
56 |
int io_error; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
57 |
} render_t; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
58 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
59 |
/* |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
60 |
* Clear out the render context and set the mode |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
61 |
*/ |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
62 |
int render_init (render_t *ctx, int mode); |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
63 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
64 |
/* |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
65 |
* What kind of image to render, PNG or RAW? |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
66 |
*/ |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
67 |
int render_set_mode (render_t *ctx, int mode); |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
68 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
69 |
/* |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
70 |
* What size of image to render |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
71 |
*/ |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
72 |
int render_set_size (render_t *ctx, u_int32_t img_w, u_int32_t img_h); |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
73 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
74 |
/* |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
75 |
* Select what region to render |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
76 |
*/ |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
77 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
78 |
// the "full" mandelbrot region |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
79 |
#define REGION_X1 -2.0 |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
80 |
#define REGION_Y1 -1.5 |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
81 |
#define REGION_X2 1.0 |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
82 |
#define REGION_Y2 1.5 |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
83 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
84 |
int render_region_full (render_t *ctx); |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
85 |
int render_region_raw (render_t *ctx, double x1, double y1, double x2, double y2); |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
86 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
87 |
/* |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
88 |
* How to handle the I/O |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
89 |
*/ |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
90 |
int render_io_custom (render_t *ctx, render_ctx_write_cb write_fn, render_ctx_flush_cb flush_fn, void *arg); |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
91 |
int render_io_stream (render_t *ctx, FILE *fh); |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
92 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
93 |
/* |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
94 |
* Remote rendering |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
95 |
*/ |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
96 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
97 |
#pragma pack(push) |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
98 |
#pragma pack(1) |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
99 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
100 |
struct render_cmd { |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
101 |
u_int32_t img_w; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
102 |
u_int32_t img_h; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
103 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
104 |
double x1; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
105 |
double y1; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
106 |
double x2; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
107 |
double y2; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
108 |
}; |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
109 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
110 |
#pragma pack(pop) |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
111 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
112 |
#define RENDER_PORT 6159 |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
113 |
#define RENDER_CMD_SIZE sizeof(struct render_cmd) |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
114 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
115 |
/* |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
116 |
* build the command to send for remote rendering |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
117 |
*/ |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
118 |
int render_cmd_build (render_t *ctx, struct render_cmd *cmd); |
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
119 |
|
6aa1a0d1f88d
partial commit of new render module, render_file should work, web_main doesn't
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
120 |
#endif /* RENDER_H */ |