Blender V5.0
RE_pipeline.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2006 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include "DNA_ID.h"
12#include "DNA_listBase.h"
13#include "DNA_vec_types.h"
14
15namespace blender::gpu {
16class Texture;
17}
18struct ExrHandle;
19struct ImBuf;
20struct Image;
21struct ImageFormatData;
22struct MovieWriter;
23struct Main;
24struct Object;
25struct RenderData;
26struct RenderResult;
27struct ReportList;
28struct Scene;
29struct StampData;
30struct ViewLayer;
31
32/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
33/* this include is what is exposed of render to outside world */
34/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
35
36/* length of the scene name + passname */
37#define RE_MAXNAME ((MAX_ID_NAME - 2) + 10)
38
39/* only used as handle */
40struct RenderView {
41 struct RenderView *next, *prev;
42 char name[/*EXR_VIEW_MAXNAME*/ 64];
43
49 struct ImBuf *ibuf;
50};
51
52struct RenderPass {
53 struct RenderPass *next, *prev;
55 char name[/*EXR_PASS_MAXNAME*/ 64];
56 char chan_id[/*EXR_PASS_MAXCHAN*/ 24];
57
67 struct ImBuf *ibuf;
68
70
71 char fullname[/*EXR_PASS_MAXNAME*/ 64];
72 char view[/*EXR_VIEW_MAXNAME*/ 64];
75
76 char _pad0[4];
77};
78
96
99
100 /* The number of users of this render result. Default value is 0. The result is freed when
101 * #RE_FreeRenderResult is called with the render result with 0 users. In a way this is
102 * off-by-one, but it is the easiest for the currently used zero-initialized state. The way to
103 * think of it is the number of extra users.
104 *
105 * TODO: Make it an actual number of users, so the #RE_FreeRenderResult frees the result when
106 * the number of users goes to 0.
107 *
108 * TODO: Make it atomic. Currently it is not to allow shallow copying. */
110
111 /* target image size */
113
114 /* The temporary storage to pass image data from #RE_AcquireResultImage.
115 * Is null pointer when the RenderResult is not coming from the #RE_AcquireResultImage, and is
116 * a pointer to an existing ibuf in either RenderView or a RenderPass otherwise. */
117 struct ImBuf *ibuf;
118
119 /* coordinates within final image (after cropping) */
121 /* offset to apply to get a border render in full image */
122 int xof, yof;
123
124 /* the main buffers */
126
127 /* multiView maps to a StringVector in OpenEXR */
128 ListBase views; /* RenderView */
129
130 /* Render layer to display. */
132
133 /* for render results in Image, verify validity for sequences */
135
142 double ppm[2];
143
144 /* for acquire image, to indicate if it there is a combined layer */
146
147 /* render info text */
148 char *text;
149 char *error;
150
152
154};
155
164
165/* *********************** API ******************** */
166
171struct Render *RE_NewRender(const void *owner);
172struct Render *RE_GetRender(const void *owner);
173
174struct Scene;
175struct Render *RE_NewSceneRender(const struct Scene *scene);
176struct Render *RE_GetSceneRender(const struct Scene *scene);
177
178struct RenderEngineType;
179struct ViewRender *RE_NewViewRender(struct RenderEngineType *engine_type);
180
181/* Creates a new render for interactive compositing of the given scene. If an existing render
182 * exists for the given scene, it is returned instead. See interactive_compositor_renders in
183 * RenderGlobal for more information. */
185
186/* Assign default dummy callbacks. */
187
193void RE_FreeRender(struct Render *re);
194void RE_FreeViewRender(struct ViewRender *view_render);
198void RE_FreeAllRender(void);
199
204
208void RE_FreeAllRenderResults(void);
209
214void RE_FreeAllPersistentData(void);
219
223void RE_FreeGPUTextureCaches(void);
224
230
234void RE_FreeRenderResult(struct RenderResult *rr);
238struct RenderResult *RE_AcquireResultRead(struct Render *re);
239struct RenderResult *RE_AcquireResultWrite(struct Render *re);
241void RE_ReleaseResult(struct Render *re);
247void RE_AcquireResultImageViews(struct Render *re, struct RenderResult *rr);
251void RE_ReleaseResultImageViews(struct Render *re, struct RenderResult *rr);
252
258void RE_AcquireResultImage(struct Render *re, struct RenderResult *rr, int view_id);
259void RE_ReleaseResultImage(struct Render *re);
260void RE_SwapResult(struct Render *re, struct RenderResult **rr);
261void RE_ClearResult(struct Render *re);
262struct RenderStats *RE_GetStats(struct Render *re);
263
267void RE_ResultGet32(struct Render *re, unsigned int *rect);
268void RE_ResultGetFloat(struct Render *re, float *rect);
269
270bool RE_ResultIsMultiView(struct RenderResult *rr);
271
272void RE_render_result_full_channel_name(char *fullname,
273 const char *layname,
274 const char *passname,
275 const char *viewname,
276 const char *chan_id,
277 int channel);
278
280 const struct ImageFormatData *imf,
281 const float dither,
282 int view_id);
284 const struct ImBuf *ibuf,
285 int view_id);
286
287struct RenderLayer *RE_GetRenderLayer(struct RenderResult *rr, const char *name);
288float *RE_RenderLayerGetPass(struct RenderLayer *rl, const char *name, const char *viewname);
290 const char *name,
291 const char *viewname);
292
293bool RE_HasSingleLayer(struct Render *re);
294
299struct RenderPass *RE_create_gp_pass(struct RenderResult *rr,
300 const char *layername,
301 const char *viewname);
302
303void RE_create_render_pass(struct RenderResult *rr,
304 const char *name,
305 int channels,
306 const char *chan_id,
307 const char *layername,
308 const char *viewname,
309 bool allocate);
310
315void RE_InitState(struct Render *re,
316 struct Render *source,
317 struct RenderData *rd,
318 struct ListBase *render_layers,
319 struct ViewLayer *single_layer,
320 int winx,
321 int winy,
322 const rcti *disprect);
323
329struct Object *RE_GetCamera(struct Render *re);
330void RE_SetOverrideCamera(struct Render *re, struct Object *cam_ob);
336void RE_SetCamera(struct Render *re, const struct Object *cam_ob);
337
341void RE_GetViewPlane(struct Render *re, rctf *r_viewplane, rcti *r_disprect);
342
347
348bool RE_WriteRenderViewsMovie(struct ReportList *reports,
349 struct RenderResult *rr,
350 struct Scene *scene,
351 struct RenderData *rd,
352 struct MovieWriter **movie_writers,
353 int totvideos,
354 bool preview);
355
365void RE_RenderFrame(struct Render *re,
366 struct Main *bmain,
367 struct Scene *scene,
368 struct ViewLayer *single_layer,
369 struct Object *camera_override,
370 int frame,
371 float subframe,
372 bool write_still);
376void RE_RenderAnim(struct Render *re,
377 struct Main *bmain,
378 struct Scene *scene,
379 struct ViewLayer *single_layer,
380 struct Object *camera_override,
381 int sfra,
382 int efra,
383 int tfra);
384#ifdef WITH_FREESTYLE
385void RE_RenderFreestyleStrokes(struct Render *re,
386 struct Main *bmain,
387 struct Scene *scene,
388 bool render);
389void RE_RenderFreestyleExternal(struct Render *re);
390#endif
391
392void RE_SetActiveRenderView(struct Render *re, const char *viewname);
393const char *RE_GetActiveRenderView(struct Render *re);
394
398void RE_SetReports(struct Render *re, struct ReportList *reports);
399
403void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene);
404
408bool RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);
409
411 ExrHandle *exrhandle, const char *colorspace, bool predivide, int rectx, int recty);
412
416
417void RE_display_init(Render *re);
419void RE_display_share(Render *re, const Render *parent_re);
420void RE_display_free(Render *re);
421
422void RE_display_update_cb(struct Render *re,
423 void *handle,
424 void (*f)(void *handle, RenderResult *rr, struct rcti *rect));
425void RE_stats_draw_cb(struct Render *re, void *handle, void (*f)(void *handle, RenderStats *rs));
426void RE_progress_cb(struct Render *re, void *handle, void (*f)(void *handle, float));
427void RE_draw_lock_cb(struct Render *re, void *handle, void (*f)(void *handle, bool lock));
428void RE_test_break_cb(struct Render *re, void *handle, bool (*f)(void *handle));
429void RE_prepare_viewlayer_cb(struct Render *re,
430 void *handle,
431 bool (*f)(void *handle, ViewLayer *vl, struct Depsgraph *depsgraph));
432void RE_current_scene_update_cb(struct Render *re,
433 void *handle,
434 void (*f)(void *handle, struct Scene *scene));
435
438
444float RE_filter_value(int type, float x);
445
446bool RE_seq_render_active(struct Scene *scene, struct RenderData *rd);
447
452bool RE_passes_have_name(struct RenderLayer *rl);
453
455 const char *name,
456 const char *viewname);
457
463void RE_pass_set_buffer_data(struct RenderPass *pass, float *data);
464
469 struct RenderPass *rpass);
470
471void RE_GetCameraWindow(struct Render *re, const struct Object *camera, float r_winmat[4][4]);
475void RE_GetCameraWindowWithOverscan(const struct Render *re, float overscan, float r_winmat[4][4]);
476void RE_GetCameraModelMatrix(const struct Render *re,
477 const struct Object *camera,
478 float r_modelmat[4][4]);
479
480void RE_GetWindowMatrixWithOverscan(bool is_ortho,
481 float clip_start,
482 float clip_end,
483 rctf viewplane,
484 float overscan,
485 float r_winmat[4][4]);
486
487struct Scene *RE_GetScene(struct Render *re);
488void RE_SetScene(struct Render *re, struct Scene *sce);
489
490bool RE_is_rendering_allowed(struct Scene *scene,
491 struct ViewLayer *single_layer,
492 struct Object *camera_override,
493 struct ReportList *reports);
494
496
497/******* defined in `render_result.cc` *********/
498
502struct RenderView *RE_RenderViewGetById(struct RenderResult *rr, int view_id);
503struct RenderView *RE_RenderViewGetByName(struct RenderResult *rr, const char *viewname);
504
506
507struct ImBuf *RE_RenderPassEnsureImBuf(RenderPass *render_pass);
508struct ImBuf *RE_RenderViewEnsureImBuf(const RenderResult *render_result, RenderView *render_view);
509
510/* Returns true if the pass is a color (as opposite of data) and needs to be color managed. */
511bool RE_RenderPassIsColor(const RenderPass *render_pass);
ID and Library types, which are fundamental for SDNA.
#define MAX_ID_NAME
Definition DNA_ID.h:373
These structs are the foundation for all linked lists in the library system.
struct ImBuf * RE_render_result_rect_to_ibuf(struct RenderResult *rr, const struct ImageFormatData *imf, const float dither, int view_id)
void RE_current_scene_update_cb(struct Render *re, void *handle, void(*f)(void *handle, struct Scene *scene))
void RE_ResultGet32(struct Render *re, unsigned int *rect)
void RE_FreeRender(struct Render *re)
void RE_GetCameraWindowWithOverscan(const struct Render *re, float overscan, float r_winmat[4][4])
void * RE_blender_gpu_context_ensure(Render *re)
void RE_test_break_cb(struct Render *re, void *handle, bool(*f)(void *handle))
struct Render * RE_GetRender(const void *owner)
void * RE_system_gpu_context_get(Render *re)
void RE_GetWindowMatrixWithOverscan(bool is_ortho, float clip_start, float clip_end, rctf viewplane, float overscan, float r_winmat[4][4])
struct RenderResult * RE_MultilayerConvert(ExrHandle *exrhandle, const char *colorspace, bool predivide, int rectx, int recty)
void RE_FreePersistentData(const struct Scene *scene)
bool RE_ResultIsMultiView(struct RenderResult *rr)
bool RE_layers_have_name(struct RenderResult *result)
bool RE_HasCombinedLayer(const RenderResult *result)
void RE_ReferenceRenderResult(struct RenderResult *rr)
struct Render * RE_NewRender(const void *owner)
void RE_AcquireResultImage(struct Render *re, struct RenderResult *rr, int view_id)
void RE_display_update_cb(struct Render *re, void *handle, void(*f)(void *handle, RenderResult *rr, struct rcti *rect))
void RE_render_result_full_channel_name(char *fullname, const char *layname, const char *passname, const char *viewname, const char *chan_id, int channel)
struct Render * RE_GetSceneRender(const struct Scene *scene)
bool RE_RenderPassIsColor(const RenderPass *render_pass)
struct RenderView * RE_RenderViewGetById(struct RenderResult *rr, int view_id)
void RE_FreeUnusedGPUResources(void)
void RE_ReleaseResult(struct Render *re)
float * RE_RenderLayerGetPass(struct RenderLayer *rl, const char *name, const char *viewname)
struct ViewRender * RE_NewViewRender(struct RenderEngineType *engine_type)
void RE_SetScene(struct Render *re, struct Scene *sce)
void RE_draw_lock_cb(struct Render *re, void *handle, void(*f)(void *handle, bool lock))
void RE_RenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct ViewLayer *single_layer, struct Object *camera_override, int frame, float subframe, bool write_still)
struct Render * RE_NewSceneRender(const struct Scene *scene)
struct Object * RE_GetCamera(struct Render *re)
bool RE_seq_render_active(struct Scene *scene, struct RenderData *rd)
bool RE_passes_have_name(struct RenderLayer *rl)
void RE_RenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, struct ViewLayer *single_layer, struct Object *camera_override, int sfra, int efra, int tfra)
void RE_FreeAllPersistentData(void)
struct RenderPass * RE_create_gp_pass(struct RenderResult *rr, const char *layername, const char *viewname)
bool RE_HasFloatPixels(const RenderResult *result)
const char * RE_GetActiveRenderView(struct Render *re)
void RE_display_free(Render *re)
void RE_ReleaseResultImage(struct Render *re)
void RE_display_ensure_gpu_context(Render *re)
struct Scene * RE_GetScene(struct Render *re)
void RE_ResultGetFloat(struct Render *re, float *rect)
blender::gpu::Texture * RE_pass_ensure_gpu_texture_cache(struct Render *re, struct RenderPass *rpass)
void RE_SetActiveRenderView(struct Render *re, const char *viewname)
void RE_pass_set_buffer_data(struct RenderPass *pass, float *data)
void RE_prepare_viewlayer_cb(struct Render *re, void *handle, bool(*f)(void *handle, ViewLayer *vl, struct Depsgraph *depsgraph))
void RE_GetCameraModelMatrix(const struct Render *re, const struct Object *camera, float r_modelmat[4][4])
void RE_SwapResult(struct Render *re, struct RenderResult **rr)
void RE_display_init(Render *re)
struct RenderLayer * RE_GetRenderLayer(struct RenderResult *rr, const char *name)
void RE_SetReports(struct Render *re, struct ReportList *reports)
void RE_ClearResult(struct Render *re)
void RE_FreeRenderResult(struct RenderResult *rr)
struct RenderResult * RE_AcquireResultRead(struct Render *re)
#define RE_MAXNAME
Definition RE_pipeline.h:37
struct ImBuf * RE_RenderLayerGetPassImBuf(struct RenderLayer *rl, const char *name, const char *viewname)
void RE_ReleaseResultImageViews(struct Render *re, struct RenderResult *rr)
bool RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode)
struct Render * RE_NewInteractiveCompositorRender(const struct Scene *scene)
bool RE_allow_render_generic_object(struct Object *ob)
void RE_stats_draw_cb(struct Render *re, void *handle, void(*f)(void *handle, RenderStats *rs))
struct ImBuf * RE_RenderViewEnsureImBuf(const RenderResult *render_result, RenderView *render_view)
bool RE_is_rendering_allowed(struct Scene *scene, struct ViewLayer *single_layer, struct Object *camera_override, struct ReportList *reports)
struct RenderResult * RE_AcquireResultWrite(struct Render *re)
void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene)
void RE_create_render_pass(struct RenderResult *rr, const char *name, int channels, const char *chan_id, const char *layername, const char *viewname, bool allocate)
void RE_display_share(Render *re, const Render *parent_re)
void RE_FreeInteractiveCompositorRenders(void)
struct RenderView * RE_RenderViewGetByName(struct RenderResult *rr, const char *viewname)
void RE_GetViewPlane(struct Render *re, rctf *r_viewplane, rcti *r_disprect)
void RE_FreeGPUTextureCaches(void)
RenderResult * RE_DuplicateRenderResult(RenderResult *rr)
void RE_render_result_rect_from_ibuf(struct RenderResult *rr, const struct ImBuf *ibuf, int view_id)
struct ImBuf * RE_RenderPassEnsureImBuf(RenderPass *render_pass)
bool RE_HasSingleLayer(struct Render *re)
void RE_AcquireResultImageViews(struct Render *re, struct RenderResult *rr)
struct RenderStats * RE_GetStats(struct Render *re)
void RE_SetCamera(struct Render *re, const struct Object *cam_ob)
float RE_filter_value(int type, float x)
bool RE_WriteRenderViewsMovie(struct ReportList *reports, struct RenderResult *rr, struct Scene *scene, struct RenderData *rd, struct MovieWriter **movie_writers, int totvideos, bool preview)
struct RenderPass * RE_pass_find_by_name(struct RenderLayer *rl, const char *name, const char *viewname)
void RE_FreeAllRenderResults(void)
void RE_SetOverrideCamera(struct Render *re, struct Object *cam_ob)
bool RE_RenderResult_is_stereo(const RenderResult *result)
void RE_GetCameraWindow(struct Render *re, const struct Object *camera, float r_winmat[4][4])
void RE_InitState(struct Render *re, struct Render *source, struct RenderData *rd, struct ListBase *render_layers, struct ViewLayer *single_layer, int winx, int winy, const rcti *disprect)
void RE_progress_cb(struct Render *re, void *handle, void(*f)(void *handle, float))
void RE_init_threadcount(Render *re)
void RE_FreeViewRender(struct ViewRender *view_render)
volatile int lock
BMesh const char void * data
BPy_StructRNA * depsgraph
const char * name
struct PreviewImage * preview
ListBase passes
Definition RE_pipeline.h:94
char name[RE_MAXNAME]
Definition RE_pipeline.h:89
struct RenderLayer * next
Definition RE_pipeline.h:86
struct RenderLayer * prev
Definition RE_pipeline.h:86
char chan_id[24]
Definition RE_pipeline.h:56
struct ImBuf * ibuf
Definition RE_pipeline.h:67
char _pad0[4]
Definition RE_pipeline.h:76
char name[64]
Definition RE_pipeline.h:55
char fullname[64]
Definition RE_pipeline.h:71
char view[64]
Definition RE_pipeline.h:72
struct RenderPass * prev
Definition RE_pipeline.h:53
struct RenderPass * next
Definition RE_pipeline.h:53
struct RenderResult * next
Definition RE_pipeline.h:98
ListBase views
ListBase layers
struct RenderResult * prev
Definition RE_pipeline.h:98
struct StampData * stamp_data
bool passes_allocated
double ppm[2]
struct ImBuf * ibuf
RenderLayer * renlay
const char * statstr
char scene_name[MAX_ID_NAME - 2]
double starttime
double lastframetime
const char * infostr
struct ImBuf * ibuf
Definition RE_pipeline.h:49
struct RenderView * prev
Definition RE_pipeline.h:41
struct RenderView * next
Definition RE_pipeline.h:41
char name[64]
Definition RE_pipeline.h:42
const void * owner
Scene * scene