59
58
typedef struct Render Render;
61
60
/* Render Result usage:
63
- render engine allocates/frees and delivers raw floating point rects
64
- right now it's full rects, but might become tiles or file
65
- the display client has to allocate display rects, sort out what to display,
66
and how it's converted
62
* - render engine allocates/frees and delivers raw floating point rects
63
* - right now it's full rects, but might become tiles or file
64
* - the display client has to allocate display rects, sort out what to display,
65
* and how it's converted
69
68
typedef struct RenderPass {
70
69
struct RenderPass *next, *prev;
142
141
typedef struct RenderStats {
144
143
int totface, totvert, totstrand, tothalo, totlamp, totpart;
145
short curfield, curblur, curpart, partsdone, convertdone;
144
short curfield, curblur, curpart, partsdone, convertdone, curfsa;
146
145
double starttime, lastframetime;
147
char *infostr, *statstr, scenename[32];
146
const char *infostr, *statstr;
158
158
/* returns 1 while render is working (or renders called from within render) */
159
159
int RE_RenderInProgress(struct Render *re);
161
/* assign default dummy callbacks */
162
void RE_InitRenderCB(struct Render *re);
161
164
/* use free render as signal to do everything over (previews) */
162
165
void RE_FreeRender (struct Render *re);
163
166
/* only called on exit */
164
167
void RE_FreeAllRender (void);
168
/* only call on file load */
169
void RE_FreeAllRenderResults(void);
166
171
/* get results and statistics */
167
172
void RE_FreeRenderResult(struct RenderResult *rr);
179
184
/* obligatory initialize call, disprect is optional */
180
185
void RE_InitState (struct Render *re, struct Render *source, struct RenderData *rd, struct SceneRenderLayer *srl, int winx, int winy, rcti *disprect);
182
/* use this to change disprect of active render */
183
void RE_SetDispRect (struct Render *re, rcti *disprect);
185
187
/* set up the viewplane/perspective matrix, three choices */
188
struct Object *RE_GetCamera(struct Render *re); /* return camera override if set */
186
189
void RE_SetCamera(struct Render *re, struct Object *camera);
190
void RE_SetEnvmapCamera(struct Render *re, struct Object *cam_ob, float viewscale, float clipsta, float clipend);
187
191
void RE_SetWindow (struct Render *re, rctf *viewplane, float clipsta, float clipend);
188
192
void RE_SetOrtho (struct Render *re, rctf *viewplane, float clipsta, float clipend);
189
193
void RE_SetPixelSize(struct Render *re, float pixsize);
208
212
void RE_TileProcessor(struct Render *re);
210
214
/* only RE_NewRender() needed, main Blender render calls */
211
void RE_BlenderFrame(struct Render *re, struct Scene *scene, struct SceneRenderLayer *srl, unsigned int lay, int frame);
212
void RE_BlenderAnim(struct Render *re, struct Scene *scene, unsigned int lay, int sfra, int efra, int tfra, struct ReportList *reports);
215
void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct SceneRenderLayer *srl, struct Object *camera_override, unsigned int lay, int frame, const short write_still);
216
void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, struct Object *camera_override, unsigned int lay, int sfra, int efra, int tfra);
218
/* error reporting */
219
void RE_SetReports(struct Render *re, struct ReportList *reports);
214
221
/* main preview render call */
215
void RE_PreviewRender(struct Render *re, struct Scene *scene);
222
void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene);
217
void RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);
218
void RE_WriteRenderResult(RenderResult *rr, char *filename, int compress);
224
int RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);
225
int RE_WriteRenderResult(struct ReportList *reports, RenderResult *rr, const char *filename, int compress);
219
226
struct RenderResult *RE_MultilayerConvert(void *exrhandle, int rectx, int recty);
228
extern const float default_envmap_layout[];
229
int RE_WriteEnvmapResult(struct ReportList *reports, struct Scene *scene, struct EnvMap *env, const char *relpath, const char imtype, float layout[12]);
221
231
/* do a full sample buffer compo */
222
void RE_MergeFullSample(struct Render *re, struct Scene *sce, struct bNodeTree *ntree);
232
void RE_MergeFullSample(struct Render *re, struct Main *bmain, struct Scene *sce, struct bNodeTree *ntree);
224
234
/* ancient stars function... go away! */
225
235
void RE_make_stars(struct Render *re, struct Scene *scenev3d, void (*initfunc)(void),
226
void (*vertexfunc)(float*), void (*termfunc)(void));
236
void (*vertexfunc)(float*), void (*termfunc)(void));
228
238
/* display and event callbacks */
229
239
void RE_display_init_cb (struct Render *re, void *handle, void (*f)(void *handle, RenderResult *rr));
231
241
void RE_display_draw_cb (struct Render *re, void *handle, void (*f)(void *handle, RenderResult *rr, volatile struct rcti *rect));
232
242
void RE_stats_draw_cb (struct Render *re, void *handle, void (*f)(void *handle, RenderStats *rs));
233
243
void RE_progress_cb (struct Render *re, void *handle, void (*f)(void *handle, float));
244
void RE_draw_lock_cb (struct Render *re, void *handle, void (*f)(void *handle, int));
234
245
void RE_test_break_cb (struct Render *re, void *handle, int (*f)(void *handle));
235
void RE_error_cb (struct Render *re, void *handle, void (*f)(void *handle, char *str));
237
247
/* should move to kernel once... still unsure on how/where */
238
248
float RE_filter_value(int type, float x);
239
249
/* vector blur zbuffer method */
240
250
void RE_zbuf_accumulate_vecblur(struct NodeBlurData *nbd, int xsize, int ysize, float *newrect, float *imgrect, float *vecbufrect, float *zbufrect);
252
int RE_seq_render_active(struct Scene *scene, struct RenderData *rd);
242
254
/* shaded view or baking options */
243
#define RE_BAKE_LIGHT 0
244
#define RE_BAKE_ALL 1
246
#define RE_BAKE_NORMALS 3
247
#define RE_BAKE_TEXTURE 4
248
#define RE_BAKE_DISPLACEMENT 5
249
#define RE_BAKE_SHADOW 6
255
#define RE_BAKE_LIGHT 0 /* not listed in rna_scene.c -> can't be enabled! */
256
#define RE_BAKE_ALL 1
258
#define RE_BAKE_NORMALS 3
259
#define RE_BAKE_TEXTURE 4
260
#define RE_BAKE_DISPLACEMENT 5
261
#define RE_BAKE_SHADOW 6
262
#define RE_BAKE_SPEC_COLOR 7
263
#define RE_BAKE_SPEC_INTENSITY 8
264
#define RE_BAKE_MIRROR_COLOR 9
265
#define RE_BAKE_MIRROR_INTENSITY 10
266
#define RE_BAKE_ALPHA 11
267
#define RE_BAKE_EMIT 12
251
void RE_Database_Baking(struct Render *re, struct Scene *scene, unsigned int lay, int type, struct Object *actob);
269
void RE_Database_Baking(struct Render *re, struct Main *bmain, struct Scene *scene, unsigned int lay, const int type, struct Object *actob);
253
271
void RE_DataBase_GetView(struct Render *re, float mat[][4]);
254
272
void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[][4]);
255
273
struct Scene *RE_GetScene(struct Render *re);
257
/* External Engine */
259
#define RE_INTERNAL 1
261
#define RE_DO_PREVIEW 4
264
extern ListBase R_engines;
266
typedef struct RenderEngineType {
267
struct RenderEngineType *next, *prev;
270
char idname[64]; // best keep the same size as BKE_ST_MAXNAME
274
void (*render)(struct RenderEngine *engine, struct Scene *scene);
276
/* RNA integration */
280
typedef struct RenderEngine {
281
RenderEngineType *type;
286
void RE_layer_load_from_file(RenderLayer *layer, struct ReportList *reports, char *filename);
287
void RE_result_load_from_file(RenderResult *result, struct ReportList *reports, char *filename);
289
struct RenderResult *RE_engine_begin_result(RenderEngine *engine, int x, int y, int w, int h);
290
void RE_engine_update_result(RenderEngine *engine, struct RenderResult *result);
291
void RE_engine_end_result(RenderEngine *engine, struct RenderResult *result);
293
int RE_engine_test_break(RenderEngine *engine);
294
void RE_engine_update_stats(RenderEngine *engine, char *stats, char *info);
296
void RE_engines_init(void);
297
void RE_engines_exit(void);
299
#endif /* RE_PIPELINE_H */
275
int RE_is_rendering_allowed(struct Scene *scene, struct Object *camera_override, struct ReportList *reports);
277
#endif /* __RE_PIPELINE_H__ */