Blender V4.3
rna_render.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include <cstdlib>
10
11#include "DNA_node_types.h"
12#include "DNA_object_types.h"
13#include "DNA_scene_types.h"
14
15#include "BLI_path_utils.hh"
16#include "BLI_utildefines.h"
17
18#ifdef WITH_PYTHON
19# include "BPY_extern.hh"
20#endif
21
22#include "DEG_depsgraph.hh"
23
24#include "BKE_image.hh"
25#include "BKE_scene.hh"
26
27#include "RNA_define.hh"
28#include "RNA_enum_types.hh"
29
30#include "rna_internal.hh"
31
32#include "RE_engine.h"
33#include "RE_pipeline.h"
34
35#include "ED_render.hh"
36
37/* Deprecated, only provided for API compatibility. */
39 {SCE_PASS_COMBINED, "COMBINED", 0, "Combined", ""},
40 {SCE_PASS_Z, "Z", 0, "Z", ""},
41 {SCE_PASS_SHADOW, "SHADOW", 0, "Shadow", ""},
42 {SCE_PASS_AO, "AO", 0, "Ambient Occlusion", ""},
43 {SCE_PASS_POSITION, "POSITION", 0, "Position", ""},
44 {SCE_PASS_NORMAL, "NORMAL", 0, "Normal", ""},
45 {SCE_PASS_VECTOR, "VECTOR", 0, "Vector", ""},
46 {SCE_PASS_INDEXOB, "OBJECT_INDEX", 0, "Object Index", ""},
47 {SCE_PASS_UV, "UV", 0, "UV", ""},
48 {SCE_PASS_MIST, "MIST", 0, "Mist", ""},
49 {SCE_PASS_EMIT, "EMIT", 0, "Emit", ""},
50 {SCE_PASS_ENVIRONMENT, "ENVIRONMENT", 0, "Environment", ""},
51 {SCE_PASS_INDEXMA, "MATERIAL_INDEX", 0, "Material Index", ""},
52 {SCE_PASS_DIFFUSE_DIRECT, "DIFFUSE_DIRECT", 0, "Diffuse Direct", ""},
53 {SCE_PASS_DIFFUSE_INDIRECT, "DIFFUSE_INDIRECT", 0, "Diffuse Indirect", ""},
54 {SCE_PASS_DIFFUSE_COLOR, "DIFFUSE_COLOR", 0, "Diffuse Color", ""},
55 {SCE_PASS_GLOSSY_DIRECT, "GLOSSY_DIRECT", 0, "Glossy Direct", ""},
56 {SCE_PASS_GLOSSY_INDIRECT, "GLOSSY_INDIRECT", 0, "Glossy Indirect", ""},
57 {SCE_PASS_GLOSSY_COLOR, "GLOSSY_COLOR", 0, "Glossy Color", ""},
58 {SCE_PASS_TRANSM_DIRECT, "TRANSMISSION_DIRECT", 0, "Transmission Direct", ""},
59 {SCE_PASS_TRANSM_INDIRECT, "TRANSMISSION_INDIRECT", 0, "Transmission Indirect", ""},
60 {SCE_PASS_TRANSM_COLOR, "TRANSMISSION_COLOR", 0, "Transmission Color", ""},
61 {SCE_PASS_SUBSURFACE_DIRECT, "SUBSURFACE_DIRECT", 0, "Subsurface Direct", ""},
62 {SCE_PASS_SUBSURFACE_INDIRECT, "SUBSURFACE_INDIRECT", 0, "Subsurface Indirect", ""},
63 {SCE_PASS_SUBSURFACE_COLOR, "SUBSURFACE_COLOR", 0, "Subsurface Color", ""},
64 {0, nullptr, 0, nullptr, nullptr},
65};
66
68 {SCE_PASS_COMBINED, "COMBINED", 0, "Combined", ""},
69 {SCE_PASS_AO, "AO", 0, "Ambient Occlusion", ""},
70 {SCE_PASS_SHADOW, "SHADOW", 0, "Shadow", ""},
71 {SCE_PASS_POSITION, "POSITION", 0, "Position", ""},
72 {SCE_PASS_NORMAL, "NORMAL", 0, "Normal", ""},
73 {SCE_PASS_UV, "UV", 0, "UV", ""},
74 {int(SCE_PASS_ROUGHNESS), "ROUGHNESS", 0, "ROUGHNESS", ""},
75 {SCE_PASS_EMIT, "EMIT", 0, "Emit", ""},
76 {SCE_PASS_ENVIRONMENT, "ENVIRONMENT", 0, "Environment", ""},
77 {SCE_PASS_DIFFUSE_COLOR, "DIFFUSE", 0, "Diffuse", ""},
78 {SCE_PASS_GLOSSY_COLOR, "GLOSSY", 0, "Glossy", ""},
79 {SCE_PASS_TRANSM_COLOR, "TRANSMISSION", 0, "Transmission", ""},
80 {0, nullptr, 0, nullptr, nullptr},
81};
82
83#ifdef RNA_RUNTIME
84
85# include "MEM_guardedalloc.h"
86
87# include "RNA_access.hh"
88
89# include "BKE_appdir.hh"
90# include "BKE_context.hh"
91# include "BKE_report.hh"
92
93# include "GPU_capabilities.hh"
94# include "GPU_shader.hh"
95# include "IMB_colormanagement.hh"
96# include "IMB_imbuf_types.hh"
97
98# include "DEG_depsgraph_query.hh"
99
100/* RenderEngine Callbacks */
101
102static void engine_tag_redraw(RenderEngine *engine)
103{
104 engine->flag |= RE_ENGINE_DO_DRAW;
105}
106
107static void engine_tag_update(RenderEngine *engine)
108{
109 engine->flag |= RE_ENGINE_DO_UPDATE;
110}
111
112static bool engine_support_display_space_shader(RenderEngine * /*engine*/, Scene *scene)
113{
114 return IMB_colormanagement_support_glsl_draw(&scene->view_settings);
115}
116
117static int engine_get_preview_pixel_size(RenderEngine * /*engine*/, Scene *scene)
118{
119 return BKE_render_preview_pixel_size(&scene->r);
120}
121
122static void engine_bind_display_space_shader(RenderEngine * /*engine*/, Scene * /*scene*/)
123{
125 GPU_shader_bind(shader);
127}
128
129static void engine_unbind_display_space_shader(RenderEngine * /*engine*/)
130{
132}
133
134static void engine_update(RenderEngine *engine, Main *bmain, Depsgraph *depsgraph)
135{
136 extern FunctionRNA rna_RenderEngine_update_func;
137 ParameterList list;
138 FunctionRNA *func;
139
140 PointerRNA ptr = RNA_pointer_create(nullptr, engine->type->rna_ext.srna, engine);
141 func = &rna_RenderEngine_update_func;
142
143 RNA_parameter_list_create(&list, &ptr, func);
144 RNA_parameter_set_lookup(&list, "data", &bmain);
145 RNA_parameter_set_lookup(&list, "depsgraph", &depsgraph);
146 engine->type->rna_ext.call(nullptr, &ptr, func, &list);
147
149}
150
151static void engine_render(RenderEngine *engine, Depsgraph *depsgraph)
152{
153 extern FunctionRNA rna_RenderEngine_render_func;
154 ParameterList list;
155 FunctionRNA *func;
156
157 PointerRNA ptr = RNA_pointer_create(nullptr, engine->type->rna_ext.srna, engine);
158 func = &rna_RenderEngine_render_func;
159
160 RNA_parameter_list_create(&list, &ptr, func);
161 RNA_parameter_set_lookup(&list, "depsgraph", &depsgraph);
162 engine->type->rna_ext.call(nullptr, &ptr, func, &list);
163
165}
166
167static void engine_render_frame_finish(RenderEngine *engine)
168{
169 extern FunctionRNA rna_RenderEngine_render_frame_finish_func;
170 ParameterList list;
171 FunctionRNA *func;
172
173 PointerRNA ptr = RNA_pointer_create(nullptr, engine->type->rna_ext.srna, engine);
174 func = &rna_RenderEngine_render_frame_finish_func;
175
176 RNA_parameter_list_create(&list, &ptr, func);
177 engine->type->rna_ext.call(nullptr, &ptr, func, &list);
178
180}
181
182static void engine_draw(RenderEngine *engine, const bContext *context, Depsgraph *depsgraph)
183{
184 extern FunctionRNA rna_RenderEngine_draw_func;
185 ParameterList list;
186 FunctionRNA *func;
187
188 PointerRNA ptr = RNA_pointer_create(nullptr, engine->type->rna_ext.srna, engine);
189 func = &rna_RenderEngine_draw_func;
190
191 RNA_parameter_list_create(&list, &ptr, func);
192 RNA_parameter_set_lookup(&list, "context", &context);
193 RNA_parameter_set_lookup(&list, "depsgraph", &depsgraph);
194 engine->type->rna_ext.call(nullptr, &ptr, func, &list);
195
197}
198
199static void engine_bake(RenderEngine *engine,
200 Depsgraph *depsgraph,
201 Object *object,
202 const int pass_type,
203 const int pass_filter,
204 const int width,
205 const int height)
206{
207 extern FunctionRNA rna_RenderEngine_bake_func;
208 ParameterList list;
209 FunctionRNA *func;
210
211 PointerRNA ptr = RNA_pointer_create(nullptr, engine->type->rna_ext.srna, engine);
212 func = &rna_RenderEngine_bake_func;
213
214 RNA_parameter_list_create(&list, &ptr, func);
215 RNA_parameter_set_lookup(&list, "depsgraph", &depsgraph);
216 RNA_parameter_set_lookup(&list, "object", &object);
217 RNA_parameter_set_lookup(&list, "pass_type", &pass_type);
218 RNA_parameter_set_lookup(&list, "pass_filter", &pass_filter);
219 RNA_parameter_set_lookup(&list, "width", &width);
220 RNA_parameter_set_lookup(&list, "height", &height);
221 engine->type->rna_ext.call(nullptr, &ptr, func, &list);
222
224}
225
226static void engine_view_update(RenderEngine *engine, const bContext *context, Depsgraph *depsgraph)
227{
228 extern FunctionRNA rna_RenderEngine_view_update_func;
229 ParameterList list;
230 FunctionRNA *func;
231
232 PointerRNA ptr = RNA_pointer_create(nullptr, engine->type->rna_ext.srna, engine);
233 func = &rna_RenderEngine_view_update_func;
234
235 RNA_parameter_list_create(&list, &ptr, func);
236 RNA_parameter_set_lookup(&list, "context", &context);
237 RNA_parameter_set_lookup(&list, "depsgraph", &depsgraph);
238 engine->type->rna_ext.call(nullptr, &ptr, func, &list);
239
241}
242
243static void engine_view_draw(RenderEngine *engine, const bContext *context, Depsgraph *depsgraph)
244{
245 extern FunctionRNA rna_RenderEngine_view_draw_func;
246 ParameterList list;
247 FunctionRNA *func;
248
249 PointerRNA ptr = RNA_pointer_create(nullptr, engine->type->rna_ext.srna, engine);
250 func = &rna_RenderEngine_view_draw_func;
251
252 RNA_parameter_list_create(&list, &ptr, func);
253 RNA_parameter_set_lookup(&list, "context", &context);
254 RNA_parameter_set_lookup(&list, "depsgraph", &depsgraph);
255 engine->type->rna_ext.call(nullptr, &ptr, func, &list);
256
258}
259
260static void engine_update_script_node(RenderEngine *engine, bNodeTree *ntree, bNode *node)
261{
262 extern FunctionRNA rna_RenderEngine_update_script_node_func;
263 ParameterList list;
264 FunctionRNA *func;
265
266 PointerRNA ptr = RNA_pointer_create(nullptr, engine->type->rna_ext.srna, engine);
267 PointerRNA nodeptr = RNA_pointer_create((ID *)ntree, &RNA_Node, node);
268 func = &rna_RenderEngine_update_script_node_func;
269
270 RNA_parameter_list_create(&list, &ptr, func);
271 RNA_parameter_set_lookup(&list, "node", &nodeptr);
272 engine->type->rna_ext.call(nullptr, &ptr, func, &list);
273
275}
276
277static void engine_update_render_passes(RenderEngine *engine, Scene *scene, ViewLayer *view_layer)
278{
279 extern FunctionRNA rna_RenderEngine_update_render_passes_func;
280 ParameterList list;
281 FunctionRNA *func;
282
283 PointerRNA ptr = RNA_pointer_create(nullptr, engine->type->rna_ext.srna, engine);
284 func = &rna_RenderEngine_update_render_passes_func;
285
286 RNA_parameter_list_create(&list, &ptr, func);
287 RNA_parameter_set_lookup(&list, "scene", &scene);
288 RNA_parameter_set_lookup(&list, "renderlayer", &view_layer);
289 engine->type->rna_ext.call(nullptr, &ptr, func, &list);
290
292}
293
294/* RenderEngine registration */
295
296static bool rna_RenderEngine_unregister(Main *bmain, StructRNA *type)
297{
299
300 if (!et) {
301 return false;
302 }
303
304 /* Stop all renders in case we were using this one. */
305 ED_render_engine_changed(bmain, false);
307
311 return true;
312}
313
314static StructRNA *rna_RenderEngine_register(Main *bmain,
315 ReportList *reports,
316 void *data,
317 const char *identifier,
318 StructValidateFunc validate,
321{
322 const char *error_prefix = "Registering render engine class:";
323 RenderEngineType *et, dummy_et = {nullptr};
324 RenderEngine dummy_engine = {nullptr};
325 bool have_function[9];
326
327 /* setup dummy engine & engine type to store static properties in */
328 dummy_engine.type = &dummy_et;
330 PointerRNA dummy_engine_ptr = RNA_pointer_create(nullptr, &RNA_RenderEngine, &dummy_engine);
331
332 /* validate the python class */
333 if (validate(&dummy_engine_ptr, data, have_function) != 0) {
334 return nullptr;
335 }
336
337 if (strlen(identifier) >= sizeof(dummy_et.idname)) {
338 BKE_reportf(reports,
339 RPT_ERROR,
340 "%s '%s' is too long, maximum length is %d",
341 error_prefix,
342 identifier,
343 int(sizeof(dummy_et.idname)));
344 return nullptr;
345 }
346
347 /* Check if we have registered this engine type before, and remove it. */
348 et = static_cast<RenderEngineType *>(
350 if (et) {
351 BKE_reportf(reports,
352 RPT_INFO,
353 "%s '%s', bl_idname '%s' has been registered before, unregistering previous",
354 error_prefix,
355 identifier,
356 dummy_et.idname);
357
358 StructRNA *srna = et->rna_ext.srna;
359 if (!(srna && rna_RenderEngine_unregister(bmain, srna))) {
360 BKE_reportf(reports,
361 RPT_ERROR,
362 "%s '%s', bl_idname '%s' %s",
363 error_prefix,
364 identifier,
365 dummy_et.idname,
366 srna ? "is built-in" : "could not be unregistered");
367 return nullptr;
368 }
369 }
370
371 /* create a new engine type */
372 et = static_cast<RenderEngineType *>(
373 MEM_mallocN(sizeof(RenderEngineType), "Python render engine"));
374 memcpy(et, &dummy_et, sizeof(dummy_et));
375
376 et->rna_ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, et->idname, &RNA_RenderEngine);
377 et->rna_ext.data = data;
378 et->rna_ext.call = call;
379 et->rna_ext.free = free;
381
382 et->update = (have_function[0]) ? engine_update : nullptr;
383 et->render = (have_function[1]) ? engine_render : nullptr;
384 et->render_frame_finish = (have_function[2]) ? engine_render_frame_finish : nullptr;
385 et->draw = (have_function[3]) ? engine_draw : nullptr;
386 et->bake = (have_function[4]) ? engine_bake : nullptr;
387 et->view_update = (have_function[5]) ? engine_view_update : nullptr;
388 et->view_draw = (have_function[6]) ? engine_view_draw : nullptr;
389 et->update_script_node = (have_function[7]) ? engine_update_script_node : nullptr;
390 et->update_render_passes = (have_function[8]) ? engine_update_render_passes : nullptr;
391
393
394 return et->rna_ext.srna;
395}
396
397static void **rna_RenderEngine_instance(PointerRNA *ptr)
398{
399 RenderEngine *engine = static_cast<RenderEngine *>(ptr->data);
400 return &engine->py_instance;
401}
402
403static StructRNA *rna_RenderEngine_refine(PointerRNA *ptr)
404{
405 RenderEngine *engine = (RenderEngine *)ptr->data;
406 return (engine->type && engine->type->rna_ext.srna) ? engine->type->rna_ext.srna :
407 &RNA_RenderEngine;
408}
409
410static void rna_RenderEngine_tempdir_get(PointerRNA * /*ptr*/, char *value)
411{
412 strcpy(value, BKE_tempdir_session());
413}
414
415static int rna_RenderEngine_tempdir_length(PointerRNA * /*ptr*/)
416{
417 return strlen(BKE_tempdir_session());
418}
419
420static PointerRNA rna_RenderEngine_render_get(PointerRNA *ptr)
421{
422 RenderEngine *engine = (RenderEngine *)ptr->data;
423
424 if (engine->re) {
426
427 return rna_pointer_inherit_refine(ptr, &RNA_RenderSettings, r);
428 }
429 else {
430 return rna_pointer_inherit_refine(ptr, &RNA_RenderSettings, nullptr);
431 }
432}
433
434static PointerRNA rna_RenderEngine_camera_override_get(PointerRNA *ptr)
435{
436 RenderEngine *engine = (RenderEngine *)ptr->data;
437 /* TODO(sergey): Shouldn't engine point to an evaluated datablocks already? */
438 if (engine->re) {
439 Object *cam = RE_GetCamera(engine->re);
440 Object *cam_eval = DEG_get_evaluated_object(engine->depsgraph, cam);
441 return rna_pointer_inherit_refine(ptr, &RNA_Object, cam_eval);
442 }
443 else {
444 return rna_pointer_inherit_refine(ptr, &RNA_Object, engine->camera_override);
445 }
446}
447
448static void rna_RenderEngine_engine_frame_set(RenderEngine *engine, int frame, float subframe)
449{
450# ifdef WITH_PYTHON
452# endif
453
454 RE_engine_frame_set(engine, frame, subframe);
455
456# ifdef WITH_PYTHON
458# endif
459}
460
461static void rna_RenderResult_views_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
462{
464 rna_iterator_listbase_begin(iter, &rr->views, nullptr);
465}
466
467static void rna_RenderResult_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
468{
470 rna_iterator_listbase_begin(iter, &rr->layers, nullptr);
471}
472
473static void rna_RenderResult_stamp_data_add_field(RenderResult *rr,
474 const char *field,
475 const char *value)
476{
477 BKE_render_result_stamp_data(rr, field, value);
478}
479
480static void rna_RenderLayer_passes_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
481{
483 rna_iterator_listbase_begin(iter, &rl->passes, nullptr);
484}
485
486static int rna_RenderPass_rect_get_length(const PointerRNA *ptr,
487 int length[RNA_MAX_ARRAY_DIMENSION])
488{
489 const RenderPass *rpass = (RenderPass *)ptr->data;
490
491 length[0] = rpass->rectx * rpass->recty;
492 length[1] = rpass->channels;
493
494 return length[0] * length[1];
495}
496
497static void rna_RenderPass_rect_get(PointerRNA *ptr, float *values)
498{
499 RenderPass *rpass = (RenderPass *)ptr->data;
500 const size_t size_in_bytes = sizeof(float) * rpass->rectx * rpass->recty * rpass->channels;
501 const float *buffer = rpass->ibuf ? rpass->ibuf->float_buffer.data : nullptr;
502
503 if (!buffer) {
504 /* No float buffer to read from, initialize to all zeroes. */
505 memset(values, 0, size_in_bytes);
506 return;
507 }
508
509 memcpy(values, buffer, size_in_bytes);
510}
511
512void rna_RenderPass_rect_set(PointerRNA *ptr, const float *values)
513{
514 RenderPass *rpass = (RenderPass *)ptr->data;
515 float *buffer = rpass->ibuf ? rpass->ibuf->float_buffer.data : nullptr;
516
517 if (!buffer) {
518 /* Only writing to an already existing buffer is supported. */
519 return;
520 }
521
522 const size_t size_in_bytes = sizeof(float) * rpass->rectx * rpass->recty * rpass->channels;
523 memcpy(buffer, values, size_in_bytes);
524}
525
526static RenderPass *rna_RenderPass_find_by_type(RenderLayer *rl, int passtype, const char *view)
527{
528 return RE_pass_find_by_type(rl, passtype, view);
529}
530
531static RenderPass *rna_RenderPass_find_by_name(RenderLayer *rl, const char *name, const char *view)
532{
533 return RE_pass_find_by_name(rl, name, view);
534}
535
536#else /* RNA_RUNTIME */
537
539{
540 StructRNA *srna;
541 PropertyRNA *prop;
542
543 FunctionRNA *func;
544 PropertyRNA *parm;
545
546 static const EnumPropertyItem render_pass_type_items[] = {
547 {SOCK_FLOAT, "VALUE", 0, "Value", ""},
548 {SOCK_VECTOR, "VECTOR", 0, "Vector", ""},
549 {SOCK_RGBA, "COLOR", 0, "Color", ""},
550 {0, nullptr, 0, nullptr, nullptr},
551 };
552
553 srna = RNA_def_struct(brna, "RenderEngine", nullptr);
554 RNA_def_struct_sdna(srna, "RenderEngine");
555 RNA_def_struct_ui_text(srna, "Render Engine", "Render engine");
556 RNA_def_struct_refine_func(srna, "rna_RenderEngine_refine");
558 "rna_RenderEngine_register",
559 "rna_RenderEngine_unregister",
560 "rna_RenderEngine_instance");
561
562 /* final render callbacks */
563 func = RNA_def_function(srna, "update", nullptr);
564 RNA_def_function_ui_description(func, "Export scene data for render");
566 RNA_def_pointer(func, "data", "BlendData", "", "");
567 RNA_def_pointer(func, "depsgraph", "Depsgraph", "", "");
568
569 func = RNA_def_function(srna, "render", nullptr);
570 RNA_def_function_ui_description(func, "Render scene into an image");
572 parm = RNA_def_pointer(func, "depsgraph", "Depsgraph", "", "");
574
575 func = RNA_def_function(srna, "render_frame_finish", nullptr);
577 func, "Perform finishing operations after all view layers in a frame were rendered");
579
580 func = RNA_def_function(srna, "draw", nullptr);
581 RNA_def_function_ui_description(func, "Draw render image");
583 parm = RNA_def_pointer(func, "context", "Context", "", "");
585 parm = RNA_def_pointer(func, "depsgraph", "Depsgraph", "", "");
587
588 func = RNA_def_function(srna, "bake", nullptr);
589 RNA_def_function_ui_description(func, "Bake passes");
591 parm = RNA_def_pointer(func, "depsgraph", "Depsgraph", "", "");
593 parm = RNA_def_pointer(func, "object", "Object", "", "");
595 parm = RNA_def_enum(func, "pass_type", rna_enum_bake_pass_type_items, 0, "Pass", "Pass to bake");
597 parm = RNA_def_int(func,
598 "pass_filter",
599 0,
600 0,
601 INT_MAX,
602 "Pass Filter",
603 "Filter to combined, diffuse, glossy and transmission passes",
604 0,
605 INT_MAX);
607 parm = RNA_def_int(func, "width", 0, 0, INT_MAX, "Width", "Image width", 0, INT_MAX);
609 parm = RNA_def_int(func, "height", 0, 0, INT_MAX, "Height", "Image height", 0, INT_MAX);
611
612 /* viewport render callbacks */
613 func = RNA_def_function(srna, "view_update", nullptr);
614 RNA_def_function_ui_description(func, "Update on data changes for viewport render");
616 parm = RNA_def_pointer(func, "context", "Context", "", "");
618 parm = RNA_def_pointer(func, "depsgraph", "Depsgraph", "", "");
620
621 func = RNA_def_function(srna, "view_draw", nullptr);
622 RNA_def_function_ui_description(func, "Draw viewport render");
624 parm = RNA_def_pointer(func, "context", "Context", "", "");
626 parm = RNA_def_pointer(func, "depsgraph", "Depsgraph", "", "");
628
629 /* shader script callbacks */
630 func = RNA_def_function(srna, "update_script_node", nullptr);
631 RNA_def_function_ui_description(func, "Compile shader script node");
633 parm = RNA_def_pointer(func, "node", "Node", "", "");
635
636 func = RNA_def_function(srna, "update_render_passes", nullptr);
637 RNA_def_function_ui_description(func, "Update the render passes that will be generated");
639 parm = RNA_def_pointer(func, "scene", "Scene", "", "");
640 parm = RNA_def_pointer(func, "renderlayer", "ViewLayer", "", "");
641
642 /* tag for redraw */
643 func = RNA_def_function(srna, "tag_redraw", "engine_tag_redraw");
644 RNA_def_function_ui_description(func, "Request redraw for viewport rendering");
645
646 /* tag for update */
647 func = RNA_def_function(srna, "tag_update", "engine_tag_update");
648 RNA_def_function_ui_description(func, "Request update call for viewport rendering");
649
650 func = RNA_def_function(srna, "begin_result", "RE_engine_begin_result");
652 func, "Create render result to write linear floating-point render layers and passes");
653 parm = RNA_def_int(func, "x", 0, 0, INT_MAX, "X", "", 0, INT_MAX);
655 parm = RNA_def_int(func, "y", 0, 0, INT_MAX, "Y", "", 0, INT_MAX);
657 parm = RNA_def_int(func, "w", 0, 0, INT_MAX, "Width", "", 0, INT_MAX);
659 parm = RNA_def_int(func, "h", 0, 0, INT_MAX, "Height", "", 0, INT_MAX);
661 RNA_def_string(func,
662 "layer",
663 nullptr,
664 0,
665 "Layer",
666 "Single layer to get render result for"); /* nullptr ok here */
667 RNA_def_string(func,
668 "view",
669 nullptr,
670 0,
671 "View",
672 "Single view to get render result for"); /* nullptr ok here */
673 parm = RNA_def_pointer(func, "result", "RenderResult", "Result", "");
674 RNA_def_function_return(func, parm);
675
676 func = RNA_def_function(srna, "update_result", "RE_engine_update_result");
678 func, "Signal that pixels have been updated and can be redrawn in the user interface");
679 parm = RNA_def_pointer(func, "result", "RenderResult", "Result", "");
681
682 func = RNA_def_function(srna, "end_result", "RE_engine_end_result");
684 "All pixels in the render result have been set and are final");
685 parm = RNA_def_pointer(func, "result", "RenderResult", "Result", "");
687 RNA_def_boolean(func,
688 "cancel",
689 false,
690 "Cancel",
691 "Don't mark tile as done, don't merge results unless forced");
692 RNA_def_boolean(func, "highlight", false, "Highlight", "Don't mark tile as done yet");
694 func, "do_merge_results", false, "Merge Results", "Merge results even if cancel=true");
695
696 func = RNA_def_function(srna, "add_pass", "RE_engine_add_pass");
697 RNA_def_function_ui_description(func, "Add a pass to the render layer");
698 parm = RNA_def_string(
699 func, "name", nullptr, 0, "Name", "Name of the Pass, without view or channel tag");
701 parm = RNA_def_int(func, "channels", 0, 0, INT_MAX, "Channels", "", 0, INT_MAX);
703 parm = RNA_def_string(
704 func, "chan_id", nullptr, 0, "Channel IDs", "Channel names, one character per channel");
706 RNA_def_string(func,
707 "layer",
708 nullptr,
709 0,
710 "Layer",
711 "Single layer to add render pass to"); /* nullptr ok here */
712
713 func = RNA_def_function(srna, "get_result", "RE_engine_get_result");
714 RNA_def_function_ui_description(func, "Get final result for non-pixel operations");
715 parm = RNA_def_pointer(func, "result", "RenderResult", "Result", "");
716 RNA_def_function_return(func, parm);
717
718 func = RNA_def_function(srna, "test_break", "RE_engine_test_break");
720 "Test if the render operation should been canceled, this is a "
721 "fast call that should be used regularly for responsiveness");
722 parm = RNA_def_boolean(func, "do_break", false, "Break", "");
723 RNA_def_function_return(func, parm);
724
725 func = RNA_def_function(srna, "pass_by_index_get", "RE_engine_pass_by_index_get");
726 parm = RNA_def_string(
727 func, "layer", nullptr, 0, "Layer", "Name of render layer to get pass for");
729 parm = RNA_def_int(func, "index", 0, 0, INT_MAX, "Index", "Index of pass to get", 0, INT_MAX);
731 parm = RNA_def_pointer(func, "render_pass", "RenderPass", "Index", "Index of pass to get");
732 RNA_def_function_return(func, parm);
733
734 func = RNA_def_function(srna, "active_view_get", "RE_engine_active_view_get");
735 parm = RNA_def_string(func, "view", nullptr, 0, "View", "Single view active");
736 RNA_def_function_return(func, parm);
737
738 func = RNA_def_function(srna, "active_view_set", "RE_engine_active_view_set");
739 parm = RNA_def_string(
740 func, "view", nullptr, 0, "View", "Single view to set as active"); /* nullptr ok here */
742
743 func = RNA_def_function(srna, "camera_shift_x", "RE_engine_get_camera_shift_x");
744 parm = RNA_def_pointer(func, "camera", "Object", "", "");
746 RNA_def_boolean(func, "use_spherical_stereo", false, "Spherical Stereo", "");
747 parm = RNA_def_float(func, "shift_x", 0.0f, 0.0f, FLT_MAX, "Shift X", "", 0.0f, FLT_MAX);
748 RNA_def_function_return(func, parm);
749
750 func = RNA_def_function(srna, "camera_model_matrix", "RE_engine_get_camera_model_matrix");
751 parm = RNA_def_pointer(func, "camera", "Object", "", "");
753 RNA_def_boolean(func, "use_spherical_stereo", false, "Spherical Stereo", "");
754 parm = RNA_def_float_matrix(func,
755 "r_model_matrix",
756 4,
757 4,
758 nullptr,
759 0.0f,
760 0.0f,
761 "Model Matrix",
762 "Normalized camera model matrix",
763 0.0f,
764 0.0f);
766 RNA_def_function_output(func, parm);
767
768 func = RNA_def_function(srna, "use_spherical_stereo", "RE_engine_get_spherical_stereo");
769 parm = RNA_def_pointer(func, "camera", "Object", "", "");
771 parm = RNA_def_boolean(func, "use_spherical_stereo", false, "Spherical Stereo", "");
772 RNA_def_function_return(func, parm);
773
774 func = RNA_def_function(srna, "update_stats", "RE_engine_update_stats");
775 RNA_def_function_ui_description(func, "Update and signal to redraw render status text");
776 parm = RNA_def_string(func, "stats", nullptr, 0, "Stats", "");
778 parm = RNA_def_string(func, "info", nullptr, 0, "Info", "");
780
781 func = RNA_def_function(srna, "frame_set", "rna_RenderEngine_engine_frame_set");
782 RNA_def_function_ui_description(func, "Evaluate scene at a different frame (for motion blur)");
783 parm = RNA_def_int(func, "frame", 0, INT_MIN, INT_MAX, "Frame", "", INT_MIN, INT_MAX);
785 parm = RNA_def_float(func, "subframe", 0.0f, 0.0f, 1.0f, "Subframe", "", 0.0f, 1.0f);
787
788 func = RNA_def_function(srna, "update_progress", "RE_engine_update_progress");
789 RNA_def_function_ui_description(func, "Update progress percentage of render");
790 parm = RNA_def_float(
791 func, "progress", 0, 0.0f, 1.0f, "", "Percentage of render that's done", 0.0f, 1.0f);
793
794 func = RNA_def_function(srna, "update_memory_stats", "RE_engine_update_memory_stats");
795 RNA_def_function_ui_description(func, "Update memory usage statistics");
796 RNA_def_float(func,
797 "memory_used",
798 0,
799 0.0f,
800 FLT_MAX,
801 "",
802 "Current memory usage in megabytes",
803 0.0f,
804 FLT_MAX);
806 func, "memory_peak", 0, 0.0f, FLT_MAX, "", "Peak memory usage in megabytes", 0.0f, FLT_MAX);
807
808 func = RNA_def_function(srna, "report", "RE_engine_report");
809 RNA_def_function_ui_description(func, "Report info, warning or error messages");
810 parm = RNA_def_enum_flag(func, "type", rna_enum_wm_report_items, 0, "Type", "");
812 parm = RNA_def_string(func, "message", nullptr, 0, "Report Message", "");
814
815 func = RNA_def_function(srna, "error_set", "RE_engine_set_error_message");
817 "Set error message displaying after the render is finished");
818 parm = RNA_def_string(func, "message", nullptr, 0, "Report Message", "");
820
821 func = RNA_def_function(srna, "bind_display_space_shader", "engine_bind_display_space_shader");
823 "Bind GLSL fragment shader that converts linear colors to "
824 "display space colors using scene color management settings");
825 parm = RNA_def_pointer(func, "scene", "Scene", "", "");
827
828 func = RNA_def_function(
829 srna, "unbind_display_space_shader", "engine_unbind_display_space_shader");
831 func, "Unbind GLSL display space shader, must always be called after binding the shader");
832
833 func = RNA_def_function(
834 srna, "support_display_space_shader", "engine_support_display_space_shader");
836 "Test if GLSL display space shader is supported for the "
837 "combination of graphics card and scene settings");
838 parm = RNA_def_pointer(func, "scene", "Scene", "", "");
840 parm = RNA_def_boolean(func, "supported", false, "Supported", "");
841 RNA_def_function_return(func, parm);
842
843 func = RNA_def_function(srna, "get_preview_pixel_size", "engine_get_preview_pixel_size");
845 "Get the pixel size that should be used for preview rendering");
846 parm = RNA_def_pointer(func, "scene", "Scene", "", "");
848 parm = RNA_def_int(func, "pixel_size", 0, 1, 8, "Pixel Size", "", 1, 8);
849 RNA_def_function_return(func, parm);
850
851 func = RNA_def_function(srna, "free_blender_memory", "RE_engine_free_blender_memory");
852 RNA_def_function_ui_description(func, "Free Blender side memory of render engine");
853
854 func = RNA_def_function(srna, "tile_highlight_set", "RE_engine_tile_highlight_set");
855 RNA_def_function_ui_description(func, "Set highlighted state of the given tile");
856 parm = RNA_def_int(func, "x", 0, 0, INT_MAX, "X", "", 0, INT_MAX);
858 parm = RNA_def_int(func, "y", 0, 0, INT_MAX, "Y", "", 0, INT_MAX);
860 parm = RNA_def_int(func, "width", 0, 0, INT_MAX, "Width", "", 0, INT_MAX);
862 parm = RNA_def_int(func, "height", 0, 0, INT_MAX, "Height", "", 0, INT_MAX);
864 parm = RNA_def_boolean(func, "highlight", false, "Highlight", "");
866
867 func = RNA_def_function(srna, "tile_highlight_clear_all", "RE_engine_tile_highlight_clear_all");
868 RNA_def_function_ui_description(func, "Clear highlight from all tiles");
869
871
872 prop = RNA_def_property(srna, "is_animation", PROP_BOOLEAN, PROP_NONE);
874
875 prop = RNA_def_property(srna, "is_preview", PROP_BOOLEAN, PROP_NONE);
876 RNA_def_property_boolean_sdna(prop, nullptr, "flag", RE_ENGINE_PREVIEW);
877
878 prop = RNA_def_property(srna, "camera_override", PROP_POINTER, PROP_NONE);
880 prop, "rna_RenderEngine_camera_override_get", nullptr, nullptr, nullptr);
881 RNA_def_property_struct_type(prop, "Object");
882
883 prop = RNA_def_property(srna, "layer_override", PROP_BOOLEAN, PROP_LAYER_MEMBER);
884 RNA_def_property_boolean_sdna(prop, nullptr, "layer_override", 1);
885 RNA_def_property_array(prop, 20);
886
887 prop = RNA_def_property(srna, "resolution_x", PROP_INT, PROP_PIXEL);
888 RNA_def_property_int_sdna(prop, nullptr, "resolution_x");
890
891 prop = RNA_def_property(srna, "resolution_y", PROP_INT, PROP_PIXEL);
892 RNA_def_property_int_sdna(prop, nullptr, "resolution_y");
894
895 prop = RNA_def_property(srna, "temporary_directory", PROP_STRING, PROP_NONE);
896 RNA_def_function_ui_description(func, "The temp directory used by Blender");
898 prop, "rna_RenderEngine_tempdir_get", "rna_RenderEngine_tempdir_length", nullptr);
900
901 /* Render Data */
902 prop = RNA_def_property(srna, "render", PROP_POINTER, PROP_NONE);
903 RNA_def_property_struct_type(prop, "RenderSettings");
904 RNA_def_property_pointer_funcs(prop, "rna_RenderEngine_render_get", nullptr, nullptr, nullptr);
905 RNA_def_property_ui_text(prop, "Render Data", "");
906
907 prop = RNA_def_property(srna, "use_highlight_tiles", PROP_BOOLEAN, PROP_NONE);
909
910 func = RNA_def_function(srna, "register_pass", "RE_engine_register_pass");
912 func, "Register a render pass that will be part of the render with the current settings");
913 parm = RNA_def_pointer(func, "scene", "Scene", "", "");
915 parm = RNA_def_pointer(func, "view_layer", "ViewLayer", "", "");
917 parm = RNA_def_string(func, "name", nullptr, MAX_NAME, "Name", "");
919 parm = RNA_def_int(func, "channels", 1, 1, 8, "Channels", "", 1, 4);
921 parm = RNA_def_string(func, "chanid", nullptr, 8, "Channel IDs", "");
923 parm = RNA_def_enum(func, "type", render_pass_type_items, SOCK_FLOAT, "Type", "");
924 RNA_def_property_enum_native_type(parm, "eNodeSocketDatatype");
926
927 /* registration */
928
929 prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
930 RNA_def_property_string_sdna(prop, nullptr, "type->idname");
932
933 prop = RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE);
934 RNA_def_property_string_sdna(prop, nullptr, "type->name");
936
937 prop = RNA_def_property(srna, "bl_use_preview", PROP_BOOLEAN, PROP_NONE);
938 RNA_def_property_boolean_sdna(prop, nullptr, "type->flag", RE_USE_PREVIEW);
941 prop,
942 "Use Preview Render",
943 "Render engine supports being used for rendering previews of materials, lights and worlds");
944
945 prop = RNA_def_property(srna, "bl_use_postprocess", PROP_BOOLEAN, PROP_NONE);
948 RNA_def_property_ui_text(prop, "Use Post Processing", "Apply compositing on render results");
949
950 prop = RNA_def_property(srna, "bl_use_eevee_viewport", PROP_BOOLEAN, PROP_NONE);
951 RNA_def_property_boolean_sdna(prop, nullptr, "type->flag", RE_USE_EEVEE_VIEWPORT);
954 "Use EEVEE Viewport",
955 "Uses EEVEE for viewport shading in Material Preview shading mode");
956
957 prop = RNA_def_property(srna, "bl_use_custom_freestyle", PROP_BOOLEAN, PROP_NONE);
958 RNA_def_property_boolean_sdna(prop, nullptr, "type->flag", RE_USE_CUSTOM_FREESTYLE);
961 prop,
962 "Use Custom Freestyle",
963 "Handles freestyle rendering on its own, instead of delegating it to EEVEE");
964
965 prop = RNA_def_property(srna, "bl_use_image_save", PROP_BOOLEAN, PROP_NONE);
970 prop,
971 "Use Image Save",
972 "Save images/movie to disk while rendering an animation. "
973 "Disabling image saving is only supported when bl_use_postprocess is also disabled.");
974
975 prop = RNA_def_property(srna, "bl_use_gpu_context", PROP_BOOLEAN, PROP_NONE);
976 RNA_def_property_boolean_sdna(prop, nullptr, "type->flag", RE_USE_GPU_CONTEXT);
979 prop,
980 "Use GPU Context",
981 "Enable OpenGL context for the render method, for engines that render using OpenGL");
982
983 prop = RNA_def_property(srna, "bl_use_shading_nodes_custom", PROP_BOOLEAN, PROP_NONE);
988 "Use Custom Shading Nodes",
989 "Don't expose Cycles and EEVEE shading nodes in the node editor user "
990 "interface, so separate nodes can be used instead");
991
992 prop = RNA_def_property(srna, "bl_use_spherical_stereo", PROP_BOOLEAN, PROP_NONE);
993 RNA_def_property_boolean_sdna(prop, nullptr, "type->flag", RE_USE_SPHERICAL_STEREO);
995 RNA_def_property_ui_text(prop, "Use Spherical Stereo", "Support spherical stereo camera models");
996
997 prop = RNA_def_property(srna, "bl_use_stereo_viewport", PROP_BOOLEAN, PROP_NONE);
998 RNA_def_property_boolean_sdna(prop, nullptr, "type->flag", RE_USE_STEREO_VIEWPORT);
1000 RNA_def_property_ui_text(prop, "Use Stereo Viewport", "Support rendering stereo 3D viewport");
1001
1002 prop = RNA_def_property(srna, "bl_use_alembic_procedural", PROP_BOOLEAN, PROP_NONE);
1003 RNA_def_property_boolean_sdna(prop, nullptr, "type->flag", RE_USE_ALEMBIC_PROCEDURAL);
1006 prop, "Use Alembic Procedural", "Support loading Alembic data at render time");
1007
1008 prop = RNA_def_property(srna, "bl_use_materialx", PROP_BOOLEAN, PROP_NONE);
1009 RNA_def_property_boolean_sdna(prop, nullptr, "type->flag", RE_USE_MATERIALX);
1012 prop, "Use MaterialX", "Use MaterialX for exporting materials to Hydra");
1013
1015}
1016
1018{
1019 /* This is implemented in Python. */
1020 StructRNA *srna = RNA_def_struct(brna, "HydraRenderEngine", "RenderEngine");
1021 RNA_def_struct_sdna(srna, "RenderEngine");
1022 RNA_def_struct_ui_text(srna, "Hydra Render Engine", "Base class from USD Hydra based renderers");
1023}
1024
1026{
1027 StructRNA *srna;
1028 PropertyRNA *prop;
1029
1030 FunctionRNA *func;
1031 PropertyRNA *parm;
1032
1033 srna = RNA_def_struct(brna, "RenderResult", nullptr);
1035 srna, "Render Result", "Result of rendering, including all layers and passes");
1036
1037 func = RNA_def_function(srna, "load_from_file", "RE_result_load_from_file");
1039 "Copies the pixels of this render result from an image file");
1042 func,
1043 "filepath",
1044 nullptr,
1045 FILE_MAX,
1046 "File Name",
1047 "Filename to load into this render tile, must be no smaller than "
1048 "the render result");
1050
1051 func = RNA_def_function(srna, "stamp_data_add_field", "rna_RenderResult_stamp_data_add_field");
1052 RNA_def_function_ui_description(func, "Add engine-specific stamp data to the result");
1053 parm = RNA_def_string(func, "field", nullptr, 1024, "Field", "Name of the stamp field to add");
1055 parm = RNA_def_string(func, "value", nullptr, 0, "Value", "Value of the stamp data");
1057
1059
1060 prop = RNA_def_property(srna, "resolution_x", PROP_INT, PROP_PIXEL);
1061 RNA_def_property_int_sdna(prop, nullptr, "rectx");
1063
1064 prop = RNA_def_property(srna, "resolution_y", PROP_INT, PROP_PIXEL);
1065 RNA_def_property_int_sdna(prop, nullptr, "recty");
1067
1068 prop = RNA_def_property(srna, "layers", PROP_COLLECTION, PROP_NONE);
1069 RNA_def_property_struct_type(prop, "RenderLayer");
1071 "rna_RenderResult_layers_begin",
1072 "rna_iterator_listbase_next",
1073 "rna_iterator_listbase_end",
1074 "rna_iterator_listbase_get",
1075 nullptr,
1076 nullptr,
1077 nullptr,
1078 nullptr);
1079
1080 prop = RNA_def_property(srna, "views", PROP_COLLECTION, PROP_NONE);
1081 RNA_def_property_struct_type(prop, "RenderView");
1083 "rna_RenderResult_views_begin",
1084 "rna_iterator_listbase_next",
1085 "rna_iterator_listbase_end",
1086 "rna_iterator_listbase_get",
1087 nullptr,
1088 nullptr,
1089 nullptr,
1090 nullptr);
1091
1093}
1094
1096{
1097 StructRNA *srna;
1098 PropertyRNA *prop;
1099
1100 srna = RNA_def_struct(brna, "RenderView", nullptr);
1101 RNA_def_struct_ui_text(srna, "Render View", "");
1102
1104
1105 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1106 RNA_def_property_string_sdna(prop, nullptr, "name");
1108 RNA_def_struct_name_property(srna, prop);
1109
1111}
1112
1114{
1115 StructRNA *srna;
1116
1117 FunctionRNA *func;
1118 PropertyRNA *parm;
1119
1120 RNA_def_property_srna(cprop, "RenderPasses");
1121 srna = RNA_def_struct(brna, "RenderPasses", nullptr);
1122 RNA_def_struct_sdna(srna, "RenderLayer");
1123 RNA_def_struct_ui_text(srna, "Render Passes", "Collection of render passes");
1124
1125 func = RNA_def_function(srna, "find_by_type", "rna_RenderPass_find_by_type");
1126 RNA_def_function_ui_description(func, "Get the render pass for a given type and view");
1127 parm = RNA_def_enum(
1128 func, "pass_type", rna_enum_render_pass_type_items, SCE_PASS_COMBINED, "Pass", "");
1130 parm = RNA_def_string(
1131 func, "view", nullptr, 0, "View", "Render view to get pass from"); /* nullptr ok here */
1133 parm = RNA_def_pointer(func, "render_pass", "RenderPass", "", "The matching render pass");
1134 RNA_def_function_return(func, parm);
1135
1136 func = RNA_def_function(srna, "find_by_name", "rna_RenderPass_find_by_name");
1137 RNA_def_function_ui_description(func, "Get the render pass for a given name and view");
1138 parm = RNA_def_string(func, "name", RE_PASSNAME_COMBINED, 0, "Pass", "");
1140 parm = RNA_def_string(
1141 func, "view", nullptr, 0, "View", "Render view to get pass from"); /* nullptr ok here */
1143 parm = RNA_def_pointer(func, "render_pass", "RenderPass", "", "The matching render pass");
1144 RNA_def_function_return(func, parm);
1145}
1146
1148{
1149 StructRNA *srna;
1150 PropertyRNA *prop;
1151
1152 FunctionRNA *func;
1153 PropertyRNA *parm;
1154
1155 srna = RNA_def_struct(brna, "RenderLayer", nullptr);
1156 RNA_def_struct_ui_text(srna, "Render Layer", "");
1157
1158 func = RNA_def_function(srna, "load_from_file", "RE_layer_load_from_file");
1160 "Copies the pixels of this renderlayer from an image file");
1162 parm = RNA_def_string(
1163 func,
1164 "filepath",
1165 nullptr,
1166 0,
1167 "File Path",
1168 "File path to load into this render tile, must be no smaller than the renderlayer");
1170 RNA_def_int(func,
1171 "x",
1172 0,
1173 0,
1174 INT_MAX,
1175 "Offset X",
1176 "Offset the position to copy from if the image is larger than the render layer",
1177 0,
1178 INT_MAX);
1179 RNA_def_int(func,
1180 "y",
1181 0,
1182 0,
1183 INT_MAX,
1184 "Offset Y",
1185 "Offset the position to copy from if the image is larger than the render layer",
1186 0,
1187 INT_MAX);
1188
1190
1191 rna_def_view_layer_common(brna, srna, false);
1192
1193 prop = RNA_def_property(srna, "passes", PROP_COLLECTION, PROP_NONE);
1194 RNA_def_property_struct_type(prop, "RenderPass");
1196 "rna_RenderLayer_passes_begin",
1197 "rna_iterator_listbase_next",
1198 "rna_iterator_listbase_end",
1199 "rna_iterator_listbase_get",
1200 nullptr,
1201 nullptr,
1202 nullptr,
1203 nullptr);
1204 rna_def_render_passes(brna, prop);
1205
1207}
1208
1210{
1211 StructRNA *srna;
1212 PropertyRNA *prop;
1213
1214 srna = RNA_def_struct(brna, "RenderPass", nullptr);
1215 RNA_def_struct_ui_text(srna, "Render Pass", "");
1216
1218
1219 prop = RNA_def_property(srna, "fullname", PROP_STRING, PROP_NONE);
1220 RNA_def_property_string_sdna(prop, nullptr, "fullname");
1222
1223 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1224 RNA_def_property_string_sdna(prop, nullptr, "name");
1226 RNA_def_struct_name_property(srna, prop);
1227
1228 prop = RNA_def_property(srna, "channel_id", PROP_STRING, PROP_NONE);
1229 RNA_def_property_string_sdna(prop, nullptr, "chan_id");
1231
1232 prop = RNA_def_property(srna, "channels", PROP_INT, PROP_NONE);
1233 RNA_def_property_int_sdna(prop, nullptr, "channels");
1235
1236 prop = RNA_def_property(srna, "rect", PROP_FLOAT, PROP_NONE);
1238 RNA_def_property_multi_array(prop, 2, nullptr);
1239 RNA_def_property_dynamic_array_funcs(prop, "rna_RenderPass_rect_get_length");
1241 prop, "rna_RenderPass_rect_get", "rna_RenderPass_rect_set", nullptr);
1242
1243 prop = RNA_def_property(srna, "view_id", PROP_INT, PROP_NONE);
1244 RNA_def_property_int_sdna(prop, nullptr, "view_id");
1246
1248}
1249
1251{
1255 rna_def_render_view(brna);
1257 rna_def_render_pass(brna);
1258}
1259
1260#endif /* RNA_RUNTIME */
void BKE_render_result_stamp_data(RenderResult *rr, const char *key, const char *value)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
int BKE_render_preview_pixel_size(const RenderData *r)
Definition scene.cc:2892
void BLI_kdtree_nd_ free(KDTree *tree)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:269
#define FILE_MAX
#define BPy_BEGIN_ALLOW_THREADS
Definition BPY_extern.hh:50
#define BPy_END_ALLOW_THREADS
Definition BPY_extern.hh:54
Object * DEG_get_evaluated_object(const Depsgraph *depsgraph, Object *object)
#define MAX_NAME
Definition DNA_defs.h:50
@ SOCK_VECTOR
@ SOCK_FLOAT
@ SOCK_RGBA
Object is a sort of wrapper for general info.
#define RE_PASSNAME_COMBINED
@ SCE_PASS_NORMAL
@ SCE_PASS_GLOSSY_DIRECT
@ SCE_PASS_AO
@ SCE_PASS_DIFFUSE_COLOR
@ SCE_PASS_POSITION
@ SCE_PASS_UV
@ SCE_PASS_SUBSURFACE_INDIRECT
@ SCE_PASS_TRANSM_DIRECT
@ SCE_PASS_SUBSURFACE_COLOR
@ SCE_PASS_GLOSSY_COLOR
@ SCE_PASS_DIFFUSE_DIRECT
@ SCE_PASS_GLOSSY_INDIRECT
@ SCE_PASS_INDEXMA
@ SCE_PASS_INDEXOB
@ SCE_PASS_TRANSM_INDIRECT
@ SCE_PASS_COMBINED
@ SCE_PASS_Z
@ SCE_PASS_VECTOR
@ SCE_PASS_ROUGHNESS
@ SCE_PASS_DIFFUSE_INDIRECT
@ SCE_PASS_SUBSURFACE_DIRECT
@ SCE_PASS_SHADOW
@ SCE_PASS_TRANSM_COLOR
@ SCE_PASS_MIST
@ SCE_PASS_EMIT
@ SCE_PASS_ENVIRONMENT
void ED_render_engine_changed(Main *bmain, bool update_scene_data)
void GPU_shader_bind(GPUShader *shader)
void GPU_shader_unbind()
GPUShader * GPU_shader_get_builtin_shader(eGPUBuiltinShader shader)
@ GPU_SHADER_3D_IMAGE
bool IMB_colormanagement_support_glsl_draw(const ColorManagedViewSettings *view_settings)
Contains defines and structs used throughout the imbuf module.
Read Guarded memory(de)allocation.
@ 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
@ RE_ENGINE_PREVIEW
Definition RE_engine.h:64
@ RE_ENGINE_HIGHLIGHT_TILES
Definition RE_engine.h:68
@ 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
#define RNA_MAX_ARRAY_DIMENSION
Definition RNA_define.hh:26
@ PARM_RNAPTR
Definition RNA_types.hh:399
@ PARM_REQUIRED
Definition RNA_types.hh:397
@ FUNC_USE_REPORTS
Definition RNA_types.hh:680
@ FUNC_REGISTER_OPTIONAL
Definition RNA_types.hh:689
@ FUNC_ALLOW_WRITE
Definition RNA_types.hh:695
int(*)(PointerRNA *ptr, void *data, bool *have_function) StructValidateFunc
Definition RNA_types.hh:746
@ PROP_FLOAT
Definition RNA_types.hh:67
@ PROP_BOOLEAN
Definition RNA_types.hh:65
@ PROP_INT
Definition RNA_types.hh:66
@ PROP_STRING
Definition RNA_types.hh:68
@ PROP_POINTER
Definition RNA_types.hh:70
@ PROP_COLLECTION
Definition RNA_types.hh:71
void(*)(void *data) StructFreeFunc
Definition RNA_types.hh:751
int(*)(bContext *C, PointerRNA *ptr, FunctionRNA *func, ParameterList *list) StructCallbackFunc
Definition RNA_types.hh:747
PropertyFlag
Definition RNA_types.hh:201
@ PROP_DYNAMIC
Definition RNA_types.hh:317
@ PROP_EDITABLE
Definition RNA_types.hh:207
@ PROP_REGISTER_OPTIONAL
Definition RNA_types.hh:301
@ PROP_REGISTER
Definition RNA_types.hh:300
@ PROP_LAYER_MEMBER
Definition RNA_types.hh:181
@ PROP_PIXEL
Definition RNA_types.hh:151
@ PROP_NONE
Definition RNA_types.hh:136
struct GPUShader GPUShader
const Depsgraph * depsgraph
#define offsetof(t, d)
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
Object * RE_GetCamera(Render *re)
void RE_engine_frame_set(RenderEngine *engine, int frame, float subframe)
void RE_engines_register(RenderEngineType *render_type)
RenderData * RE_engine_get_render_data(Render *re)
ListBase R_engines
void *(* MEM_mallocN)(size_t len, const char *str)
Definition mallocn.cc:44
void RNA_struct_blender_type_set(StructRNA *srna, void *blender_type)
void * RNA_struct_blender_type_get(StructRNA *srna)
void RNA_parameter_list_free(ParameterList *parms)
void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb, IteratorSkipFunc skip)
void RNA_parameter_set_lookup(ParameterList *parms, const char *identifier, const void *value)
PointerRNA rna_pointer_inherit_refine(const PointerRNA *ptr, StructRNA *type, void *data)
ParameterList * RNA_parameter_list_create(ParameterList *parms, PointerRNA *, FunctionRNA *func)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_define_verify_sdna(bool verify)
void RNA_def_property_enum_native_type(PropertyRNA *prop, const char *native_enum_type)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
PropertyRNA * RNA_def_float_matrix(StructOrFunctionRNA *cont_, const char *identifier, const int rows, const int columns, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring, const char *assignint)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_boolean_default(PropertyRNA *prop, bool value)
void RNA_def_struct_register_funcs(StructRNA *srna, const char *reg, const char *unreg, const char *instance)
void RNA_def_property_dynamic_array_funcs(PropertyRNA *prop, const char *getlength)
void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, const int length[])
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
void RNA_def_property_array(PropertyRNA *prop, int length)
PropertyRNA * RNA_def_string_file_name(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
StructRNA * RNA_def_struct_ptr(BlenderRNA *brna, const char *identifier, StructRNA *srnafrom)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
PropertyRNA * RNA_def_enum_flag(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
void RNA_def_function_flag(FunctionRNA *func, int flag)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_struct_free_extension(StructRNA *srna, ExtensionRNA *rna_ext)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_struct_free(BlenderRNA *brna, StructRNA *srna)
void RNA_def_function_output(FunctionRNA *, PropertyRNA *ret)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void rna_RenderPass_rect_set(PointerRNA *ptr, const float *values)
BlenderRNA BLENDER_RNA
void rna_def_view_layer_common(BlenderRNA *brna, StructRNA *srna, bool scene)
const EnumPropertyItem rna_enum_bake_pass_type_items[]
Definition rna_render.cc:67
static void rna_def_render_pass(BlenderRNA *brna)
static void rna_def_render_view(BlenderRNA *brna)
static void rna_def_render_engine(BlenderRNA *brna)
static void rna_def_render_passes(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_hydra_render_engine(BlenderRNA *brna)
void RNA_def_render(BlenderRNA *brna)
const EnumPropertyItem rna_enum_render_pass_type_items[]
Definition rna_render.cc:38
static void rna_def_render_layer(BlenderRNA *brna)
static void rna_def_render_result(BlenderRNA *brna)
const EnumPropertyItem rna_enum_wm_report_items[]
Definition rna_wm.cc:594
RenderPass * RE_pass_find_by_type(RenderLayer *rl, int passtype, const char *viewname)
RenderPass * RE_pass_find_by_name(RenderLayer *rl, const char *name, const char *viewname)
#define FLT_MAX
Definition stdcycles.h:14
StructRNA * srna
Definition RNA_types.hh:780
StructCallbackFunc call
Definition RNA_types.hh:781
StructFreeFunc free
Definition RNA_types.hh:782
Definition DNA_ID.h:413
void * data
Definition RNA_types.hh:42
void(* render)(struct RenderEngine *engine, struct Depsgraph *depsgraph)
Definition RE_engine.h:84
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
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
void(* bake)(struct RenderEngine *engine, struct Depsgraph *depsgraph, struct Object *object, int pass_type, int pass_filter, int width, int height)
Definition RE_engine.h:97
struct Depsgraph * depsgraph
Definition RE_engine.h:158
RenderEngineType * type
Definition RE_engine.h:134
struct Render * re
Definition RE_engine.h:141
void * py_instance
Definition RE_engine.h:135
struct Object * camera_override
Definition RE_engine.h:138
void * BKE_tempdir_session
Definition stubs.c:38
PointerRNA * ptr
Definition wm_files.cc:4126