Blender V4.5
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
56
67
68extern ListBase R_engines;
69
72
73 /* type info */
74 char idname[64]; /* best keep the same size as BKE_ST_MAXNAME. */
75 char name[64];
76 int flag;
77
78 void (*update)(struct RenderEngine *engine, struct Main *bmain, struct Depsgraph *depsgraph);
79
80 void (*render)(struct RenderEngine *engine, struct Depsgraph *depsgraph);
81
82 /* Offline rendering is finished - no more view layers will be rendered.
83 *
84 * All the pending data is to be communicated from the engine back to Blender. In a possibly
85 * most memory-efficient manner (engine might free its database before making Blender to allocate
86 * full-frame render result). */
87 void (*render_frame_finish)(struct RenderEngine *engine);
88
89 void (*draw)(struct RenderEngine *engine,
90 const struct bContext *context,
91 struct Depsgraph *depsgraph);
92
93 void (*bake)(struct RenderEngine *engine,
94 struct Depsgraph *depsgraph,
95 struct Object *object,
96 int pass_type,
97 int pass_filter,
98 int width,
99 int height);
100
101 void (*view_update)(struct RenderEngine *engine,
102 const struct bContext *context,
103 struct Depsgraph *depsgraph);
104 void (*view_draw)(struct RenderEngine *engine,
105 const struct bContext *context,
106 struct Depsgraph *depsgraph);
107
108 void (*update_script_node)(struct RenderEngine *engine,
109 struct bNodeTree *ntree,
110 struct bNode *node);
111 void (*update_render_passes)(struct RenderEngine *engine,
112 struct Scene *scene,
113 struct ViewLayer *view_layer);
114 void (*update_custom_camera)(struct RenderEngine *engine, struct Camera *cam);
115
116 struct DrawEngineType *draw_engine;
117
118 /* RNA integration */
120};
121
122using update_render_passes_cb_t = void (*)(void *userdata,
123 struct Scene *scene,
124 struct ViewLayer *view_layer,
125 const char *name,
126 int channels,
127 const char *chanid,
129
133
134 int flag;
136 unsigned int layer_override;
137
138 struct Render *re;
140 char text[512]; /* IMA_MAX_RENDER_TEXT_SIZE */
141
143
145
146 struct {
147 const struct BakeTargets *targets;
148 const struct BakePixel *pixels;
149 float *result;
153
154 /* Depsgraph */
155 struct Depsgraph *depsgraph;
157
158 /* callback for render pass query */
162
163 /* GPU context. */
164 void *system_gpu_context; /* WindowManager GPU context -> GHOSTContext. */
167 struct GPUContext *blender_gpu_context;
168 /* Whether to restore DRWState after RenderEngine display pass. */
170};
171
173void RE_engine_free(RenderEngine *engine);
174
180 struct RenderLayer *layer, struct ReportList *reports, const char *filepath, int x, int y);
182 struct ReportList *reports,
183 const char *filepath);
184
186 RenderEngine *engine, int x, int y, int w, int h, const char *layername, const char *viewname);
189 const char *name,
190 int channels,
191 const char *chan_id,
192 const char *layername);
194 struct RenderResult *result,
195 bool cancel,
196 bool highlight,
197 bool merge_results);
198struct RenderResult *RE_engine_get_result(struct RenderEngine *engine);
199
201 const char *layer_name,
202 int index);
203
204const char *RE_engine_active_view_get(RenderEngine *engine);
205void RE_engine_active_view_set(RenderEngine *engine, const char *viewname);
207 struct Object *camera,
208 bool use_spherical_stereo);
210 struct Object *camera,
211 bool use_spherical_stereo,
212 float r_modelmat[16]);
213bool RE_engine_get_spherical_stereo(RenderEngine *engine, struct Object *camera);
214
216void RE_engine_update_stats(RenderEngine *engine, const char *stats, const char *info);
218void RE_engine_update_memory_stats(RenderEngine *engine, float mem_used, float mem_peak);
219void RE_engine_report(RenderEngine *engine, int type, const char *msg);
220void RE_engine_set_error_message(RenderEngine *engine, const char *msg);
221
222bool RE_engine_render(struct Render *re, bool do_all);
223
224bool RE_engine_is_external(const struct Render *re);
225
226void RE_engine_frame_set(struct RenderEngine *engine, int frame, float subframe);
227
229 struct Scene *scene,
230 struct ViewLayer *view_layer,
232 void *callback_data);
233void RE_engine_register_pass(struct RenderEngine *engine,
234 struct Scene *scene,
235 struct ViewLayer *view_layer,
236 const char *name,
237 int channels,
238 const char *chanid,
240
242
243struct RenderEngine *RE_engine_get(const struct Render *re);
244struct RenderEngine *RE_view_engine_get(const struct ViewRender *view_render);
245
255bool RE_engine_draw_acquire(struct Render *re);
256void RE_engine_draw_release(struct Render *re);
257
263bool RE_engine_gpu_context_create(struct RenderEngine *engine);
265
266bool RE_engine_gpu_context_enable(struct RenderEngine *engine);
268
269void RE_engine_gpu_context_lock(struct RenderEngine *engine);
270void RE_engine_gpu_context_unlock(struct RenderEngine *engine);
271
272/* Engine Types */
273
274void RE_engines_init(void);
275void RE_engines_exit(void);
276void RE_engines_register(RenderEngineType *render_type);
277
282bool RE_engine_supports_alembic_procedural(const RenderEngineType *render_type, Scene *scene);
283
284RenderEngineType *RE_engines_find(const char *idname);
285
286const rcti *RE_engine_get_current_tiles(struct Render *re, int *r_total_tiles);
289 struct Main *bmain,
290 struct Scene *scene);
291
293
295 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 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_ALEMBIC_PROCEDURAL
Definition RE_engine.h:53
@ 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:54
@ 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)
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(*)(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:122
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:58
@ RE_ENGINE_PREVIEW
Definition RE_engine.h:60
@ RE_ENGINE_HIGHLIGHT_TILES
Definition RE_engine.h:64
@ RE_ENGINE_RENDERING
Definition RE_engine.h:63
@ RE_ENGINE_CAN_DRAW
Definition RE_engine.h:65
@ RE_ENGINE_DO_UPDATE
Definition RE_engine.h:62
@ RE_ENGINE_DO_DRAW
Definition RE_engine.h:61
@ RE_ENGINE_ANIMATION
Definition RE_engine.h:59
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)
ReportList * reports
Definition WM_types.hh:1025
float progress
Definition WM_types.hh:1019
BPy_StructRNA * depsgraph
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
ListBase R_engines
char engine[32]
void(* render)(struct RenderEngine *engine, struct Depsgraph *depsgraph)
Definition RE_engine.h:80
void(* view_draw)(struct RenderEngine *engine, const struct bContext *context, struct Depsgraph *depsgraph)
Definition RE_engine.h:104
void(* update)(struct RenderEngine *engine, struct Main *bmain, struct Depsgraph *depsgraph)
Definition RE_engine.h:78
ExtensionRNA rna_ext
Definition RE_engine.h:119
void(* view_update)(struct RenderEngine *engine, const struct bContext *context, struct Depsgraph *depsgraph)
Definition RE_engine.h:101
char name[64]
Definition RE_engine.h:75
struct RenderEngineType * next
Definition RE_engine.h:71
struct DrawEngineType * draw_engine
Definition RE_engine.h:116
void(* draw)(struct RenderEngine *engine, const struct bContext *context, struct Depsgraph *depsgraph)
Definition RE_engine.h:89
char idname[64]
Definition RE_engine.h:74
void(* render_frame_finish)(struct RenderEngine *engine)
Definition RE_engine.h:87
void(* update_script_node)(struct RenderEngine *engine, struct bNodeTree *ntree, struct bNode *node)
Definition RE_engine.h:108
void(* update_render_passes)(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer)
Definition RE_engine.h:111
void(* update_custom_camera)(struct RenderEngine *engine, struct Camera *cam)
Definition RE_engine.h:114
struct RenderEngineType * prev
Definition RE_engine.h:71
struct ReportList * reports
Definition RE_engine.h:144
struct Depsgraph * depsgraph
Definition RE_engine.h:155
RenderEngineType * type
Definition RE_engine.h:131
unsigned int layer_override
Definition RE_engine.h:136
const struct BakePixel * pixels
Definition RE_engine.h:148
ThreadMutex blender_gpu_context_mutex
Definition RE_engine.h:165
float * result
Definition RE_engine.h:149
char text[512]
Definition RE_engine.h:140
bool has_grease_pencil
Definition RE_engine.h:156
bool use_drw_render_context
Definition RE_engine.h:166
struct Render * re
Definition RE_engine.h:138
struct GPUContext * blender_gpu_context
Definition RE_engine.h:167
void * update_render_passes_data
Definition RE_engine.h:161
ListBase fullresult
Definition RE_engine.h:139
void * py_instance
Definition RE_engine.h:132
void * system_gpu_context
Definition RE_engine.h:164
update_render_passes_cb_t update_render_passes_cb
Definition RE_engine.h:160
bool gpu_restore_context
Definition RE_engine.h:169
ThreadMutex update_render_passes_mutex
Definition RE_engine.h:159
const struct BakeTargets * targets
Definition RE_engine.h:147
struct Object * camera_override
Definition RE_engine.h:135
char name[64]
Definition RE_pipeline.h:50
char name[64]