4 * ***** BEGIN GPL LICENSE BLOCK *****
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software Foundation,
18 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 * The Original Code is Copyright (C) 2006 Blender Foundation.
21 * All rights reserved.
23 * The Original Code is: all of this file.
25 * Contributor(s): none yet.
27 * ***** END GPL LICENSE BLOCK *****
33 #include "DNA_listBase.h"
34 #include "DNA_vec_types.h"
35 #include "BKE_utildefines.h"
40 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
41 /* this include is what is exposed of render to outside world */
42 /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
47 /* only used as handle */
48 typedef struct Render Render;
50 /* Render Result usage:
52 - render engine allocates/frees and delivers raw floating point rects
53 - right now it's full rects, but might become tiles or file
54 - the display client has to allocate display rects, sort out what to display,
55 and how it's converted
58 /* a renderlayer is a full image, but with all passes and samples */
59 /* size of the rects is defined in RenderResult */
60 typedef struct RenderLayer {
61 struct RenderLayer *next, *prev;
63 /* copy of RenderData */
64 char name[RE_MAXNAME];
66 int layflag, passflag;
68 float *rectf; /* standard rgba buffer */
69 float *rectz; /* standard camera coordinate zbuffer */
75 typedef struct RenderResult {
77 /* target image size */
81 /* optional, 32 bits version of picture, used for ogl render and image curves */
83 /* if this exists, a copy of one of layers, or result of composited layers */
85 /* if this exists, a copy of one of layers, or result of composited layers */
88 /* coordinates within final image (after cropping) */
91 /* the main buffers */
93 int actlay; /* copy of renderdata..., so display callbacks can find out */
95 /* optional saved endresult on disk */
96 char exrfile[FILE_MAXDIR];
101 typedef struct RenderStats {
102 int totface, totvert, tothalo, totlamp, totpart;
103 short curfield, curblur, curpart, partsdone, convertdone;
104 double starttime, lastframetime;
108 /* *********************** API ******************** */
110 /* the name is used as identifier, so elsewhere in blender the result can retrieved */
111 /* calling a new render with same name, frees automatic existing render */
112 Render *RE_NewRender (const char *name);
113 Render *RE_GetRender(const char *name);
115 /* use free render as signal to do everything over (previews) */
116 void RE_FreeRender (Render *re);
117 /* only called on exit */
118 void RE_FreeAllRender (void);
120 /* get results and statistics */
121 RenderResult *RE_GetResult(Render *re);
122 void RE_GetResultImage(Render *re, RenderResult *rr);
123 RenderStats *RE_GetStats(Render *re);
124 void RE_ResultGet32(Render *re, unsigned int *rect);
126 /* obligatory initialize call, disprect is optional */
127 void RE_InitState (struct Render *re, struct RenderData *rd, int winx, int winy, rcti *disprect);
129 /* use this to change disprect of active render */
130 void RE_SetDispRect (struct Render *re, rcti *disprect);
132 /* set up the viewplane/perspective matrix, three choices */
133 void RE_SetCamera(Render *re, struct Object *camera);
134 void RE_SetWindow (Render *re, rctf *viewplane, float clipsta, float clipend);
135 void RE_SetOrtho (Render *re, rctf *viewplane, float clipsta, float clipend);
137 /* option to set viewmatrix before making dbase */
138 void RE_SetView (Render *re, float mat[][4]);
140 /* make or free the dbase */
141 void RE_Database_FromScene(Render *re, Scene *scene, int use_camera_view);
142 void RE_Database_Free (Render *re);
144 /* project dbase again, when viewplane/perspective changed */
145 void RE_DataBase_ApplyWindow(Render *re);
147 /* the main processor, assumes all was set OK! */
148 void RE_TileProcessor(Render *re);
150 /* only RE_NewRender() needed, main Blender render calls */
151 void RE_BlenderFrame(Render *re, struct Scene *scene, int frame);
152 void RE_BlenderAnim(Render *re, struct Scene *scene, int sfra, int efra);
155 /* display and event callbacks */
156 void RE_display_init_cb (Render *re, void (*f)(RenderResult *rr));
157 void RE_display_clear_cb(Render *re, void (*f)(RenderResult *rr));
158 void RE_display_draw_cb (Render *re, void (*f)(RenderResult *rr, struct rcti *rect));
159 void RE_stats_draw_cb (Render *re, void (*f)(RenderStats *rs));
160 void RE_timecursor_cb (Render *re, void (*f)(int));
161 void RE_test_break_cb (Render *re, int (*f)(void));
162 void RE_test_return_cb (Render *re, int (*f)(void));
163 void RE_error_cb (Render *re, void (*f)(const char *str));
168 #endif /* RE_PIPELINE_H */