Blender V5.0
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
8
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/* External Engine */
40
55
66
67extern ListBase R_engines;
68
71
72 /* Type info. */
73 char idname[/*BKE_ST_MAXNAME*/ 64];
74 char name[64];
75 int flag;
76
77 void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Depsgraph *depsgraph);
78
79 void (*render)(struct RenderEngine *engine, struct Depsgraph *depsgraph);
80
81 /* Offline rendering is finished - no more view layers will be rendered.
82 *
83 * All the pending data is to be communicated from the engine back to Blender. In a possibly
84 * most memory-efficient manner (engine might free its database before making Blender to allocate
85 * full-frame render result). */
86 void (*render_frame_finish)(struct RenderEngine *engine);
87
88 void (*draw)(struct RenderEngine *engine,
89 const struct bContext *context,
90 struct Depsgraph *depsgraph);
91
92 void (*bake)(struct RenderEngine *engine,
93 struct Depsgraph *depsgraph,
94 struct Object *object,
95 int pass_type,
96 int pass_filter,
97 int width,
98 int height);
99
100 void (*view_update)(struct RenderEngine *engine,
101 const struct bContext *context,
102 struct Depsgraph *depsgraph);
103 void (*view_draw)(struct RenderEngine *engine,
104 const struct bContext *context,
105 struct Depsgraph *depsgraph);
106
107 void (*update_script_node)(struct RenderEngine *engine,
108 struct bNodeTree *ntree,
109 struct bNode *node);
110 void (*update_render_passes)(struct RenderEngine *engine,
111 struct Scene *scene,
112 struct ViewLayer *view_layer);
113 void (*update_custom_camera)(struct RenderEngine *engine, struct Camera *cam);
114
115 struct DrawEngineType *draw_engine;
116
117 /* RNA integration */
119};
120
121using update_render_passes_cb_t = void (*)(void *userdata,
122 struct Scene *scene,
123 struct ViewLayer *view_layer,
124 const char *name,
125 int channels,
126 const char *chanid,
128
132
133 int flag;
135 unsigned int layer_override;
136
137 struct Render *re;
139 char text[/*IMA_MAX_RENDER_TEXT_SIZE*/ 512];
140
142
144
145 struct {
146 const struct BakeTargets *targets;
147 const struct BakePixel *pixels;
148 float *result;
152
153 /* Depsgraph */
154 struct Depsgraph *depsgraph;
156
157 /* callback for render pass query */
161
162 /* GPU context. */
163 void *system_gpu_context; /* WindowManager GPU context -> GHOSTContext. */
166 struct GPUContext *blender_gpu_context;
167 /* Whether to restore DRWState after RenderEngine display pass. */
169};
170
172void RE_engine_free(RenderEngine *engine);
173
179 struct RenderLayer *layer, struct ReportList *reports, const char *filepath, int x, int y);
181 struct ReportList *reports,
182 const char *filepath);
183
185 RenderEngine *engine, int x, int y, int w, int h, const char *layername, const char *viewname);
188 const char *name,
189 int channels,
190 const char *chan_id,
191 const char *layername);
193 struct RenderResult *result,
194 bool cancel,
195 bool highlight,
196 bool merge_results);
197struct RenderResult *RE_engine_get_result(struct RenderEngine *engine);
198
200 const char *layer_name,
201 int index);
202
203const char *RE_engine_active_view_get(RenderEngine *engine);
204void RE_engine_active_view_set(RenderEngine *engine, const char *viewname);
206 struct Object *camera,
207 bool use_spherical_stereo);
209 struct Object *camera,
210 bool use_spherical_stereo,
211 float r_modelmat[16]);
212bool RE_engine_get_spherical_stereo(RenderEngine *engine, struct Object *camera);
213
215void RE_engine_update_stats(RenderEngine *engine, const char *stats, const char *info);
216void RE_engine_update_progress(RenderEngine *engine, float progress);
217void RE_engine_update_memory_stats(RenderEngine *engine, float mem_used, float mem_peak);
218void RE_engine_report(RenderEngine *engine, int type, const char *msg);
219void RE_engine_set_error_message(RenderEngine *engine, const char *msg);
220
221bool RE_engine_render(struct Render *re, bool do_all);
222
223bool RE_engine_is_external(const struct Render *re);
224
225void RE_engine_frame_set(struct RenderEngine *engine, int frame, float subframe);
226
228 struct Scene *scene,
229 struct ViewLayer *view_layer,
231 void *callback_data);
232void RE_engine_register_pass(struct RenderEngine *engine,
233 struct Scene *scene,
234 struct ViewLayer *view_layer,
235 const char *name,
236 int channels,
237 const char *chanid,
239
241
242struct RenderEngine *RE_engine_get(const struct Render *re);
243struct RenderEngine *RE_view_engine_get(const struct ViewRender *view_render);
244
254bool RE_engine_draw_acquire(struct Render *re);
255void RE_engine_draw_release(struct Render *re);
256
262bool RE_engine_gpu_context_create(struct RenderEngine *engine);
264
265bool RE_engine_gpu_context_enable(struct RenderEngine *engine);
267
268void RE_engine_gpu_context_lock(struct RenderEngine *engine);
269void RE_engine_gpu_context_unlock(struct RenderEngine *engine);
270
271/* Engine Types */
272
273void RE_engines_init(void);
274void RE_engines_exit(void);
275void RE_engines_register(RenderEngineType *render_type);
276
277RenderEngineType *RE_engines_find(const char *idname);
278
279const rcti *RE_engine_get_current_tiles(struct Render *re, int *r_total_tiles);
282 struct Main *bmain,
283 struct Scene *scene);
284
286
288 struct RenderEngine *engine, int x, int y, int width, int height, bool highlight);
pthread_mutex_t ThreadMutex
Definition BLI_threads.h:79
These structs are the foundation for all linked lists in the library system.
eNodeSocketDatatype
bool RE_engine_draw_acquire(struct Render *re)
bool RE_engine_get_spherical_stereo(RenderEngine *engine, struct Object *camera)
void(*)(void *userdata, struct Scene *scene, struct ViewLayer *view_layer, const char *name, int channels, const char *chanid, eNodeSocketDatatype type) update_render_passes_cb_t
Definition RE_engine.h:121
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:42
@ RE_INTERNAL
Definition RE_engine.h:43
@ RE_USE_PREVIEW
Definition RE_engine.h:44
@ RE_USE_CUSTOM_FREESTYLE
Definition RE_engine.h:51
@ RE_USE_SHADING_NODES_CUSTOM
Definition RE_engine.h:47
@ RE_USE_STEREO_VIEWPORT
Definition RE_engine.h:49
@ RE_USE_SPHERICAL_STEREO
Definition RE_engine.h:48
@ RE_USE_POSTPROCESS
Definition RE_engine.h:45
@ RE_USE_MATERIALX
Definition RE_engine.h:53
@ RE_USE_EEVEE_VIEWPORT
Definition RE_engine.h:46
@ RE_USE_GPU_CONTEXT
Definition RE_engine.h:50
@ RE_USE_NO_IMAGE_SAVE
Definition RE_engine.h:52
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)
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)
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:57
@ RE_ENGINE_PREVIEW
Definition RE_engine.h:59
@ RE_ENGINE_HIGHLIGHT_TILES
Definition RE_engine.h:63
@ RE_ENGINE_RENDERING
Definition RE_engine.h:62
@ RE_ENGINE_CAN_DRAW
Definition RE_engine.h:64
@ RE_ENGINE_DO_UPDATE
Definition RE_engine.h:61
@ RE_ENGINE_DO_DRAW
Definition RE_engine.h:60
@ RE_ENGINE_ANIMATION
Definition RE_engine.h:58
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)
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)
BPy_StructRNA * depsgraph
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
ListBase R_engines
const char * name
char engine[32]
void(* render)(struct RenderEngine *engine, struct Depsgraph *depsgraph)
Definition RE_engine.h:79
void(* view_draw)(struct RenderEngine *engine, const struct bContext *context, struct Depsgraph *depsgraph)
Definition RE_engine.h:103
void(* update)(struct RenderEngine *engine, struct Main *bmain, struct Depsgraph *depsgraph)
Definition RE_engine.h:77
ExtensionRNA rna_ext
Definition RE_engine.h:118
void(* view_update)(struct RenderEngine *engine, const struct bContext *context, struct Depsgraph *depsgraph)
Definition RE_engine.h:100
char name[64]
Definition RE_engine.h:74
struct RenderEngineType * next
Definition RE_engine.h:70
struct DrawEngineType * draw_engine
Definition RE_engine.h:115
void(* draw)(struct RenderEngine *engine, const struct bContext *context, struct Depsgraph *depsgraph)
Definition RE_engine.h:88
char idname[64]
Definition RE_engine.h:73
void(* render_frame_finish)(struct RenderEngine *engine)
Definition RE_engine.h:86
void(* update_script_node)(struct RenderEngine *engine, struct bNodeTree *ntree, struct bNode *node)
Definition RE_engine.h:107
void(* update_render_passes)(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer)
Definition RE_engine.h:110
void(* update_custom_camera)(struct RenderEngine *engine, struct Camera *cam)
Definition RE_engine.h:113
struct RenderEngineType * prev
Definition RE_engine.h:70
struct ReportList * reports
Definition RE_engine.h:143
struct Depsgraph * depsgraph
Definition RE_engine.h:154
RenderEngineType * type
Definition RE_engine.h:130
unsigned int layer_override
Definition RE_engine.h:135
const struct BakePixel * pixels
Definition RE_engine.h:147
ThreadMutex blender_gpu_context_mutex
Definition RE_engine.h:164
float * result
Definition RE_engine.h:148
char text[512]
Definition RE_engine.h:139
bool has_grease_pencil
Definition RE_engine.h:155
bool use_drw_render_context
Definition RE_engine.h:165
struct Render * re
Definition RE_engine.h:137
struct GPUContext * blender_gpu_context
Definition RE_engine.h:166
void * update_render_passes_data
Definition RE_engine.h:160
ListBase fullresult
Definition RE_engine.h:138
void * py_instance
Definition RE_engine.h:131
void * system_gpu_context
Definition RE_engine.h:163
update_render_passes_cb_t update_render_passes_cb
Definition RE_engine.h:159
bool gpu_restore_context
Definition RE_engine.h:168
ThreadMutex update_render_passes_mutex
Definition RE_engine.h:158
const struct BakeTargets * targets
Definition RE_engine.h:146
struct Object * camera_override
Definition RE_engine.h:134