Blender V4.3
RE_engine.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
9#pragma once
10
11#include "DNA_listBase.h"
12#include "DNA_node_types.h"
13#include "DNA_scene_types.h"
14#include "RE_bake.h"
15#include "RNA_types.hh"
16
17#include "BLI_threads.h"
18
19struct BakeTargets;
20struct BakePixel;
21struct Depsgraph;
22struct GPUContext;
23struct Main;
24struct Object;
25struct Render;
26struct RenderData;
27struct RenderEngine;
28struct RenderEngineType;
29struct RenderLayer;
30struct RenderPass;
31struct RenderResult;
32struct ReportList;
33struct Scene;
34struct ViewLayer;
35struct ViewRender;
36struct bNode;
37struct bNodeTree;
38
39#ifdef __cplusplus
40extern "C" {
41#endif
42
43/* External Engine */
44
60
71
72extern ListBase R_engines;
73
74typedef struct RenderEngineType {
76
77 /* type info */
78 char idname[64]; /* best keep the same size as BKE_ST_MAXNAME. */
79 char name[64];
80 int flag;
81
82 void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Depsgraph *depsgraph);
83
84 void (*render)(struct RenderEngine *engine, struct Depsgraph *depsgraph);
85
86 /* Offline rendering is finished - no more view layers will be rendered.
87 *
88 * All the pending data is to be communicated from the engine back to Blender. In a possibly
89 * most memory-efficient manner (engine might free its database before making Blender to allocate
90 * full-frame render result). */
91 void (*render_frame_finish)(struct RenderEngine *engine);
92
93 void (*draw)(struct RenderEngine *engine,
94 const struct bContext *context,
95 struct Depsgraph *depsgraph);
96
97 void (*bake)(struct RenderEngine *engine,
98 struct Depsgraph *depsgraph,
99 struct Object *object,
100 int pass_type,
101 int pass_filter,
102 int width,
103 int height);
104
105 void (*view_update)(struct RenderEngine *engine,
106 const struct bContext *context,
107 struct Depsgraph *depsgraph);
108 void (*view_draw)(struct RenderEngine *engine,
109 const struct bContext *context,
110 struct Depsgraph *depsgraph);
111
112 void (*update_script_node)(struct RenderEngine *engine,
113 struct bNodeTree *ntree,
114 struct bNode *node);
115 void (*update_render_passes)(struct RenderEngine *engine,
116 struct Scene *scene,
117 struct ViewLayer *view_layer);
118
120
121 /* RNA integration */
124
125typedef void (*update_render_passes_cb_t)(void *userdata,
126 struct Scene *scene,
127 struct ViewLayer *view_layer,
128 const char *name,
129 int channels,
130 const char *chanid,
132
133typedef struct RenderEngine {
136
137 int flag;
139 unsigned int layer_override;
140
141 struct Render *re;
143 char text[512]; /* IMA_MAX_RENDER_TEXT_SIZE */
144
146
148
149 struct {
150 const struct BakeTargets *targets;
151 const struct BakePixel *pixels;
152 float *result;
156
157 /* Depsgraph */
158 struct Depsgraph *depsgraph;
160
161 /* callback for render pass query */
165
166 /* GPU context. */
167 void *system_gpu_context; /* WindowManager GPU context -> GHOSTContext. */
171 /* Whether to restore DRWState after RenderEngine display pass. */
174
176void RE_engine_free(RenderEngine *engine);
177
183 struct RenderLayer *layer, struct ReportList *reports, const char *filepath, int x, int y);
184void RE_result_load_from_file(struct RenderResult *result,
185 struct ReportList *reports,
186 const char *filepath);
187
189 RenderEngine *engine, int x, int y, int w, int h, const char *layername, const char *viewname);
190void RE_engine_update_result(RenderEngine *engine, struct RenderResult *result);
192 const char *name,
193 int channels,
194 const char *chan_id,
195 const char *layername);
197 struct RenderResult *result,
198 bool cancel,
199 bool highlight,
200 bool merge_results);
201struct RenderResult *RE_engine_get_result(struct RenderEngine *engine);
202
204 const char *layer_name,
205 int index);
206
207const char *RE_engine_active_view_get(RenderEngine *engine);
208void RE_engine_active_view_set(RenderEngine *engine, const char *viewname);
210 struct Object *camera,
211 bool use_spherical_stereo);
213 struct Object *camera,
214 bool use_spherical_stereo,
215 float r_modelmat[16]);
216bool RE_engine_get_spherical_stereo(RenderEngine *engine, struct Object *camera);
217
219void RE_engine_update_stats(RenderEngine *engine, const char *stats, const char *info);
220void RE_engine_update_progress(RenderEngine *engine, float progress);
221void RE_engine_update_memory_stats(RenderEngine *engine, float mem_used, float mem_peak);
222void RE_engine_report(RenderEngine *engine, int type, const char *msg);
223void RE_engine_set_error_message(RenderEngine *engine, const char *msg);
224
225bool RE_engine_render(struct Render *re, bool do_all);
226
227bool RE_engine_is_external(const struct Render *re);
228
229void RE_engine_frame_set(struct RenderEngine *engine, int frame, float subframe);
230
232 struct Scene *scene,
233 struct ViewLayer *view_layer,
235 void *callback_data);
236void RE_engine_register_pass(struct RenderEngine *engine,
237 struct Scene *scene,
238 struct ViewLayer *view_layer,
239 const char *name,
240 int channels,
241 const char *chanid,
243
245
246struct RenderEngine *RE_engine_get(const struct Render *re);
247struct RenderEngine *RE_view_engine_get(const struct ViewRender *view_render);
248
258bool RE_engine_draw_acquire(struct Render *re);
259void RE_engine_draw_release(struct Render *re);
260
266bool RE_engine_gpu_context_create(struct RenderEngine *engine);
268
269bool RE_engine_gpu_context_enable(struct RenderEngine *engine);
271
272void RE_engine_gpu_context_lock(struct RenderEngine *engine);
273void RE_engine_gpu_context_unlock(struct RenderEngine *engine);
274
275/* Engine Types */
276
277void RE_engines_init(void);
278void RE_engines_exit(void);
279void RE_engines_register(RenderEngineType *render_type);
280
285bool RE_engine_supports_alembic_procedural(const RenderEngineType *render_type, Scene *scene);
286
287RenderEngineType *RE_engines_find(const char *idname);
288
289const rcti *RE_engine_get_current_tiles(struct Render *re, int *r_total_tiles);
292 struct Main *bmain,
293 struct Scene *scene);
294
296
298 struct RenderEngine *engine, int x, int y, int width, int height, bool highlight);
300
301#ifdef __cplusplus
302}
303#endif
pthread_mutex_t ThreadMutex
Definition BLI_threads.h:83
These structs are the foundation for all linked lists in the library system.
eNodeSocketDatatype
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
bool RE_engine_draw_acquire(struct Render *re)
bool RE_engine_get_spherical_stereo(RenderEngine *engine, struct Object *camera)
void RE_engine_draw_release(struct Render *re)
void RE_engine_tile_highlight_set(struct RenderEngine *engine, int x, int y, int width, int height, bool highlight)
const char * RE_engine_active_view_get(RenderEngine *engine)
RenderEngineTypeFlag
Definition RE_engine.h:46
@ RE_INTERNAL
Definition RE_engine.h:47
@ RE_USE_PREVIEW
Definition RE_engine.h:48
@ RE_USE_CUSTOM_FREESTYLE
Definition RE_engine.h:55
@ RE_USE_SHADING_NODES_CUSTOM
Definition RE_engine.h:51
@ RE_USE_ALEMBIC_PROCEDURAL
Definition RE_engine.h:57
@ RE_USE_STEREO_VIEWPORT
Definition RE_engine.h:53
@ RE_USE_SPHERICAL_STEREO
Definition RE_engine.h:52
@ RE_USE_POSTPROCESS
Definition RE_engine.h:49
@ RE_USE_MATERIALX
Definition RE_engine.h:58
@ RE_USE_EEVEE_VIEWPORT
Definition RE_engine.h:50
@ RE_USE_GPU_CONTEXT
Definition RE_engine.h:54
@ RE_USE_NO_IMAGE_SAVE
Definition RE_engine.h:56
void RE_result_load_from_file(struct RenderResult *result, struct ReportList *reports, const char *filepath)
void RE_engine_update_render_passes(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer, update_render_passes_cb_t callback, void *callback_data)
void RE_engine_free_blender_memory(struct RenderEngine *engine)
bool RE_engine_supports_alembic_procedural(const RenderEngineType *render_type, Scene *scene)
struct RenderResult * RE_engine_get_result(struct RenderEngine *engine)
void RE_engine_add_pass(RenderEngine *engine, const char *name, int channels, const char *chan_id, const char *layername)
void RE_engine_report(RenderEngine *engine, int type, const char *msg)
void RE_engine_gpu_context_lock(struct RenderEngine *engine)
void RE_engine_active_view_set(RenderEngine *engine, const char *viewname)
void RE_engine_end_result(RenderEngine *engine, struct RenderResult *result, bool cancel, bool highlight, bool merge_results)
void RE_bake_engine_set_engine_parameters(struct Render *re, struct Main *bmain, struct Scene *scene)
void RE_layer_load_from_file(struct RenderLayer *layer, struct ReportList *reports, const char *filepath, int x, int y)
void RE_engine_update_memory_stats(RenderEngine *engine, float mem_used, float mem_peak)
struct RenderData * RE_engine_get_render_data(struct Render *re)
void RE_engine_update_result(RenderEngine *engine, struct RenderResult *result)
void RE_engines_init(void)
RenderEngineType * RE_engines_find(const char *idname)
RenderEngine * RE_engine_create(RenderEngineType *type)
bool RE_engine_test_break(RenderEngine *engine)
void RE_engine_register_pass(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer, const char *name, int channels, const char *chanid, eNodeSocketDatatype type)
void RE_engine_update_stats(RenderEngine *engine, const char *stats, const char *info)
struct RenderResult * RE_engine_begin_result(RenderEngine *engine, int x, int y, int w, int h, const char *layername, const char *viewname)
void RE_engines_exit(void)
void RE_engine_tile_highlight_clear_all(struct RenderEngine *engine)
void RE_engine_gpu_context_destroy(struct RenderEngine *engine)
bool RE_engine_use_persistent_data(struct RenderEngine *engine)
void RE_engines_register(RenderEngineType *render_type)
bool RE_engine_render(struct Render *re, bool do_all)
void RE_engine_free(RenderEngine *engine)
void(* update_render_passes_cb_t)(void *userdata, struct Scene *scene, struct ViewLayer *view_layer, const char *name, int channels, const char *chanid, eNodeSocketDatatype type)
Definition RE_engine.h:125
struct RenderEngine RenderEngine
bool RE_engine_gpu_context_enable(struct RenderEngine *engine)
struct RenderEngine * RE_view_engine_get(const struct ViewRender *view_render)
void RE_engine_set_error_message(RenderEngine *engine, const char *msg)
struct RenderEngine * RE_engine_get(const struct Render *re)
RenderEngineFlag
Definition RE_engine.h:62
@ RE_ENGINE_PREVIEW
Definition RE_engine.h:64
@ RE_ENGINE_HIGHLIGHT_TILES
Definition RE_engine.h:68
@ RE_ENGINE_RENDERING
Definition RE_engine.h:67
@ RE_ENGINE_CAN_DRAW
Definition RE_engine.h:69
@ RE_ENGINE_DO_UPDATE
Definition RE_engine.h:66
@ RE_ENGINE_DO_DRAW
Definition RE_engine.h:65
@ RE_ENGINE_ANIMATION
Definition RE_engine.h:63
ListBase R_engines
float RE_engine_get_camera_shift_x(RenderEngine *engine, struct Object *camera, bool use_spherical_stereo)
void RE_engine_gpu_context_disable(struct RenderEngine *engine)
struct RenderPass * RE_engine_pass_by_index_get(struct RenderEngine *engine, const char *layer_name, int index)
struct RenderEngineType RenderEngineType
const rcti * RE_engine_get_current_tiles(struct Render *re, int *r_total_tiles)
void RE_engine_update_progress(RenderEngine *engine, float progress)
void RE_engine_gpu_context_unlock(struct RenderEngine *engine)
void RE_engine_get_camera_model_matrix(RenderEngine *engine, struct Object *camera, bool use_spherical_stereo, float r_modelmat[16])
void RE_engine_frame_set(struct RenderEngine *engine, int frame, float subframe)
bool RE_engine_is_external(const struct Render *re)
bool RE_engine_gpu_context_create(struct RenderEngine *engine)
struct GPUContext GPUContext
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
OperationNode * node
const Depsgraph * depsgraph
DEGForeachIDComponentCallback callback
char engine[32]
void(* view_draw)(struct RenderEngine *engine, const struct bContext *context, struct Depsgraph *depsgraph)
Definition RE_engine.h:108
void(* update)(struct RenderEngine *engine, struct Main *bmain, struct Depsgraph *depsgraph)
Definition RE_engine.h:82
ExtensionRNA rna_ext
Definition RE_engine.h:122
void(* view_update)(struct RenderEngine *engine, const struct bContext *context, struct Depsgraph *depsgraph)
Definition RE_engine.h:105
struct RenderEngineType * next
Definition RE_engine.h:75
struct DrawEngineType * draw_engine
Definition RE_engine.h:119
void(* draw)(struct RenderEngine *engine, const struct bContext *context, struct Depsgraph *depsgraph)
Definition RE_engine.h:93
char idname[64]
Definition RE_engine.h:78
void(* render_frame_finish)(struct RenderEngine *engine)
Definition RE_engine.h:91
void(* update_script_node)(struct RenderEngine *engine, struct bNodeTree *ntree, struct bNode *node)
Definition RE_engine.h:112
void(* update_render_passes)(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer)
Definition RE_engine.h:115
struct RenderEngineType * prev
Definition RE_engine.h:75
struct ReportList * reports
Definition RE_engine.h:147
struct Depsgraph * depsgraph
Definition RE_engine.h:158
RenderEngineType * type
Definition RE_engine.h:134
unsigned int layer_override
Definition RE_engine.h:139
struct RenderEngine::@1361 bake
const struct BakePixel * pixels
Definition RE_engine.h:151
ThreadMutex blender_gpu_context_mutex
Definition RE_engine.h:168
float * result
Definition RE_engine.h:152
bool has_grease_pencil
Definition RE_engine.h:159
bool use_drw_render_context
Definition RE_engine.h:169
struct Render * re
Definition RE_engine.h:141
struct GPUContext * blender_gpu_context
Definition RE_engine.h:170
void * update_render_passes_data
Definition RE_engine.h:164
ListBase fullresult
Definition RE_engine.h:142
void * py_instance
Definition RE_engine.h:135
void * system_gpu_context
Definition RE_engine.h:167
update_render_passes_cb_t update_render_passes_cb
Definition RE_engine.h:163
bool gpu_restore_context
Definition RE_engine.h:172
ThreadMutex update_render_passes_mutex
Definition RE_engine.h:162
const struct BakeTargets * targets
Definition RE_engine.h:150
struct Object * camera_override
Definition RE_engine.h:138
char name[64]