Blender V4.3
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
16
17struct GPUTexture;
18struct ImBuf;
19struct Image;
20struct ImageFormatData;
21struct Main;
22struct Object;
23struct RenderData;
24struct RenderResult;
25struct ReportList;
26struct Scene;
27struct StampData;
28struct ViewLayer;
29struct bMovieHandle;
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
36/* this include is what is exposed of render to outside world */
37/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
38
39/* length of the scene name + passname */
40#define RE_MAXNAME ((MAX_ID_NAME - 2) + 10)
41
42/* only used as handle */
43typedef struct Render Render;
44
45typedef struct RenderView {
46 struct RenderView *next, *prev;
47 char name[64]; /* EXR_VIEW_MAXNAME */
48
49 /* Image buffer of a composited layer or a sequencer output.
50 * The ibuf is only allocated if it has an actual data in one of its buffers (float, byte, or
51 * GPU). */
52 struct ImBuf *ibuf;
54
55typedef struct RenderPass {
56 struct RenderPass *next, *prev;
58 char name[64]; /* amount defined in IMB_openexr.hh */
59 char chan_id[8]; /* amount defined in IMB_openexr.hh */
60
61 /* Image buffer which contains data of this pass.
62 *
63 * The data can be either CPU side stored in ibuf->float_buffer, or a GPU-side stored in
64 * ibuf->gpu (during rendering, i.e.).
65 *
66 * The pass data storage is lazily allocated, and until data is actually provided (via either CPU
67 * buffer of GPU texture) the ibuf is not allocated. */
68 struct ImBuf *ibuf;
69
71
72 char fullname[64]; /* EXR_PASS_MAXNAME */
73 char view[64]; /* EXR_VIEW_MAXNAME */
74 int view_id; /* quick lookup */
75
76 char _pad0[4];
78
100
101typedef struct RenderResult {
103
104 /* The number of users of this render result. Default value is 0. The result is freed when
105 * #RE_FreeRenderResult is called with the render result with 0 users. In a way this is
106 * off-by-one, but it is the easiest for the currently used zero-initialized state. The way to
107 * think of it is the number of extra users.
108 *
109 * TODO: Make it an actual number of users, so the #RE_FreeRenderResult frees the result when
110 * the number of users goes to 0.
111 *
112 * TODO: Make it atomic. Currently it is not to allow shallow copying. */
114
115 /* target image size */
117
118 /* The temporary storage to pass image data from #RE_AcquireResultImage.
119 * Is null pointer when the RenderResult is not coming from the #RE_AcquireResultImage, and is
120 * a pointer to an existing ibuf in either RenderView or a RenderPass otherwise. */
121 struct ImBuf *ibuf;
122
123 /* coordinates within final image (after cropping) */
125 /* offset to apply to get a border render in full image */
126 int xof, yof;
127
128 /* the main buffers */
130
131 /* multiView maps to a StringVector in OpenEXR */
132 ListBase views; /* RenderView */
133
134 /* Render layer to display. */
136
137 /* for render results in Image, verify validity for sequences */
139
140 /* for acquire image, to indicate if it there is a combined layer */
142
143 /* render info text */
144 char *text;
145 char *error;
146
148
151
160
161/* *********************** API ******************** */
162
167struct Render *RE_NewRender(const char *name);
168struct Render *RE_GetRender(const char *name);
169
170struct Scene;
171struct Render *RE_NewSceneRender(const struct Scene *scene);
172struct Render *RE_GetSceneRender(const struct Scene *scene);
173
174struct RenderEngineType;
175struct ViewRender *RE_NewViewRender(struct RenderEngineType *engine_type);
176
177/* Creates a new render for interactive compositing of the given scene. If an existing render
178 * exists for the given scene, it is returned instead. See interactive_compositor_renders in
179 * RenderGlobal for more information. */
181
182/* Assign default dummy callbacks. */
183
188void RE_InitRenderCB(struct Render *re);
189
195void RE_FreeRender(struct Render *re);
196void RE_FreeViewRender(struct ViewRender *view_render);
200void RE_FreeAllRender(void);
201
205void RE_FreeAllRenderResults(void);
206
211void RE_FreeAllPersistentData(void);
216
220void RE_FreeGPUTextureCaches(void);
221
227
231void RE_FreeRenderResult(struct RenderResult *rr);
235struct RenderResult *RE_AcquireResultRead(struct Render *re);
236struct RenderResult *RE_AcquireResultWrite(struct Render *re);
238void RE_ReleaseResult(struct Render *re);
244void RE_AcquireResultImageViews(struct Render *re, struct RenderResult *rr);
248void RE_ReleaseResultImageViews(struct Render *re, struct RenderResult *rr);
249
255void RE_AcquireResultImage(struct Render *re, struct RenderResult *rr, int view_id);
256void RE_ReleaseResultImage(struct Render *re);
257void RE_SwapResult(struct Render *re, struct RenderResult **rr);
258void RE_ClearResult(struct Render *re);
259struct RenderStats *RE_GetStats(struct Render *re);
260
264void RE_ResultGet32(struct Render *re, unsigned int *rect);
265void RE_ResultGetFloat(struct Render *re, float *rect);
266
267void RE_render_result_full_channel_name(char *fullname,
268 const char *layname,
269 const char *passname,
270 const char *viewname,
271 const char *chan_id,
272 int channel);
273
275 const struct ImageFormatData *imf,
276 const float dither,
277 int view_id);
279 const struct ImBuf *ibuf,
280 int view_id);
281
282struct RenderLayer *RE_GetRenderLayer(struct RenderResult *rr, const char *name);
283float *RE_RenderLayerGetPass(struct RenderLayer *rl, const char *name, const char *viewname);
285 const char *name,
286 const char *viewname);
287
288bool RE_HasSingleLayer(struct Render *re);
289
294struct RenderPass *RE_create_gp_pass(struct RenderResult *rr,
295 const char *layername,
296 const char *viewname);
297
298void RE_create_render_pass(struct RenderResult *rr,
299 const char *name,
300 int channels,
301 const char *chan_id,
302 const char *layername,
303 const char *viewname,
304 bool allocate);
305
310void RE_InitState(struct Render *re,
311 struct Render *source,
312 struct RenderData *rd,
313 struct ListBase *render_layers,
314 struct ViewLayer *single_layer,
315 int winx,
316 int winy,
317 const rcti *disprect);
318
324struct Object *RE_GetCamera(struct Render *re);
325void RE_SetOverrideCamera(struct Render *re, struct Object *cam_ob);
331void RE_SetCamera(struct Render *re, const struct Object *cam_ob);
332
336void RE_GetViewPlane(struct Render *re, rctf *r_viewplane, rcti *r_disprect);
337
342
343bool RE_WriteRenderViewsMovie(struct ReportList *reports,
344 struct RenderResult *rr,
345 struct Scene *scene,
346 struct RenderData *rd,
347 struct bMovieHandle *mh,
348 void **movie_ctx_arr,
349 int totvideos,
350 bool preview);
351
361void RE_RenderFrame(struct Render *re,
362 struct Main *bmain,
363 struct Scene *scene,
364 struct ViewLayer *single_layer,
365 struct Object *camera_override,
366 int frame,
367 float subframe,
368 bool write_still);
372void RE_RenderAnim(struct Render *re,
373 struct Main *bmain,
374 struct Scene *scene,
375 struct ViewLayer *single_layer,
376 struct Object *camera_override,
377 int sfra,
378 int efra,
379 int tfra);
380#ifdef WITH_FREESTYLE
381void RE_RenderFreestyleStrokes(struct Render *re,
382 struct Main *bmain,
383 struct Scene *scene,
384 bool render);
385void RE_RenderFreestyleExternal(struct Render *re);
386#endif
387
388void RE_SetActiveRenderView(struct Render *re, const char *viewname);
389const char *RE_GetActiveRenderView(struct Render *re);
390
394void RE_SetReports(struct Render *re, struct ReportList *reports);
395
399void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene);
400
404bool RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);
405
407 void *exrhandle, const char *colorspace, bool predivide, int rectx, int recty);
408
409/* Display and event callbacks. */
410
414void RE_display_init_cb(struct Render *re,
415 void *handle,
416 void (*f)(void *handle, RenderResult *rr));
417void RE_display_clear_cb(struct Render *re,
418 void *handle,
419 void (*f)(void *handle, RenderResult *rr));
420void RE_display_update_cb(struct Render *re,
421 void *handle,
422 void (*f)(void *handle, RenderResult *rr, struct rcti *rect));
423void RE_stats_draw_cb(struct Render *re, void *handle, void (*f)(void *handle, RenderStats *rs));
424void RE_progress_cb(struct Render *re, void *handle, void (*f)(void *handle, float));
425void RE_draw_lock_cb(struct Render *re, void *handle, void (*f)(void *handle, bool lock));
426void RE_test_break_cb(struct Render *re, void *handle, bool (*f)(void *handle));
427void RE_prepare_viewlayer_cb(struct Render *re,
428 void *handle,
429 bool (*f)(void *handle, ViewLayer *vl, struct Depsgraph *depsgraph));
430void RE_current_scene_update_cb(struct Render *re,
431 void *handle,
432 void (*f)(void *handle, struct Scene *scene));
433
437
440
446float RE_filter_value(int type, float x);
447
448bool RE_seq_render_active(struct Scene *scene, struct RenderData *rd);
449
454bool RE_passes_have_name(struct RenderLayer *rl);
455
457 const char *name,
458 const char *viewname);
463 int passtype,
464 const char *viewname);
465
471void RE_pass_set_buffer_data(struct RenderPass *pass, float *data);
472
476struct GPUTexture *RE_pass_ensure_gpu_texture_cache(struct Render *re, struct RenderPass *rpass);
477
478/* shaded view or baking options */
479#define RE_BAKE_NORMALS 0
480#define RE_BAKE_DISPLACEMENT 1
481#define RE_BAKE_AO 2
482
483void RE_GetCameraWindow(struct Render *re, const struct Object *camera, float r_winmat[4][4]);
487void RE_GetCameraWindowWithOverscan(const struct Render *re, float overscan, float r_winmat[4][4]);
488void RE_GetCameraModelMatrix(const struct Render *re,
489 const struct Object *camera,
490 float r_modelmat[4][4]);
491
492void RE_GetWindowMatrixWithOverscan(bool is_ortho,
493 float clip_start,
494 float clip_end,
495 rctf viewplane,
496 float overscan,
497 float r_winmat[4][4]);
498
499struct Scene *RE_GetScene(struct Render *re);
500void RE_SetScene(struct Render *re, struct Scene *sce);
501
502bool RE_is_rendering_allowed(struct Scene *scene,
503 struct ViewLayer *single_layer,
504 struct Object *camera_override,
505 struct ReportList *reports);
506
508
509/******* defined in `render_result.cc` *********/
510
514struct RenderView *RE_RenderViewGetById(struct RenderResult *rr, int view_id);
515struct RenderView *RE_RenderViewGetByName(struct RenderResult *rr, const char *viewname);
516
518
519struct ImBuf *RE_RenderPassEnsureImBuf(RenderPass *render_pass);
520struct ImBuf *RE_RenderViewEnsureImBuf(const RenderResult *render_result, RenderView *render_view);
521
522/* Returns true if the pass is a color (as opposite of data) and needs to be color managed. */
523bool RE_RenderPassIsColor(const RenderPass *render_pass);
524
525#ifdef __cplusplus
526}
527#endif
ID and Library types, which are fundamental for SDNA.
#define MAX_ID_NAME
Definition DNA_ID.h:377
These structs are the foundation for all linked lists in the library system.
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Gabor Generate Gabor noise Gradient Generate interpolated color and intensity values based on the input vector Magic Generate a psychedelic color texture Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between camera
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a producing a negative Combine Generate a color from its and blue channels(Deprecated)") DefNode(ShaderNode
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))
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])
void RE_FreePersistentData(const struct Scene *scene)
bool RE_layers_have_name(struct RenderResult *result)
struct RenderPass * RE_pass_find_by_type(struct RenderLayer *rl, int passtype, const char *viewname)
bool RE_HasCombinedLayer(const RenderResult *result)
void RE_ReferenceRenderResult(struct RenderResult *rr)
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_ReleaseResultImage(struct Render *re)
struct Scene * RE_GetScene(struct Render *re)
void RE_blender_gpu_context_free(Render *re)
void RE_ResultGetFloat(struct Render *re, float *rect)
void RE_SetActiveRenderView(struct Render *re, const char *viewname)
void RE_pass_set_buffer_data(struct RenderPass *pass, float *data)
void RE_InitRenderCB(struct Render *re)
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)
struct RenderResult * RE_MultilayerConvert(void *exrhandle, const char *colorspace, bool predivide, int rectx, int recty)
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:40
struct ImBuf * RE_RenderLayerGetPassImBuf(struct RenderLayer *rl, const char *name, const char *viewname)
void RE_ReleaseResultImageViews(struct Render *re, struct RenderResult *rr)
struct Render * RE_GetRender(const char *name)
bool RE_WriteRenderViewsMovie(struct ReportList *reports, struct RenderResult *rr, struct Scene *scene, struct RenderData *rd, struct bMovieHandle *mh, void **movie_ctx_arr, int totvideos, bool preview)
bool RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode)
void RE_system_gpu_context_ensure(Render *re)
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_display_clear_cb(struct Render *re, void *handle, void(*f)(void *handle, RenderResult *rr))
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)
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_display_init_cb(struct Render *re, void *handle, void(*f)(void *handle, RenderResult *rr))
void RE_system_gpu_context_free(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)
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)
struct GPUTexture * RE_pass_ensure_gpu_texture_cache(struct Render *re, struct RenderPass *rpass)
struct Render * RE_NewRender(const char *name)
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
BPy_StructRNA * depsgraph
struct PreviewImage * preview
ListBase passes
Definition RE_pipeline.h:97
char name[RE_MAXNAME]
Definition RE_pipeline.h:89
struct RenderLayer * next
Definition RE_pipeline.h:86
void * exrhandle
Definition RE_pipeline.h:95
struct RenderLayer * prev
Definition RE_pipeline.h:86
struct ImBuf * ibuf
Definition RE_pipeline.h:68
char chan_id[8]
Definition RE_pipeline.h:59
char _pad0[4]
Definition RE_pipeline.h:76
char name[64]
Definition RE_pipeline.h:58
char fullname[64]
Definition RE_pipeline.h:72
char view[64]
Definition RE_pipeline.h:73
struct RenderPass * prev
Definition RE_pipeline.h:56
struct RenderPass * next
Definition RE_pipeline.h:56
struct RenderResult * next
ListBase views
ListBase layers
struct RenderResult * prev
struct StampData * stamp_data
bool passes_allocated
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:52
struct RenderView * prev
Definition RE_pipeline.h:46
struct RenderView * next
Definition RE_pipeline.h:46
char name[64]
Definition RE_pipeline.h:47
Scene * scene
char name[RE_MAXNAME]