15#include <forward_list>
173 Render *re,
Main *bmain,
Scene *scene,
const int totvideos,
const char *filepath_override);
189 return G.is_break ==
true;
199 float megs_used_memory, megs_peak_memory;
200 char info_time_str[32];
205 megs_used_memory = (
mem_in_use) / (1024.0 * 1024.0);
206 megs_peak_memory = (peak_memory) / (1024.0 * 1024.0);
216 char *message =
BLI_sprintfN(
RPT_(
"Fra:%d Mem:%.2fM (Peak %.2fM) | Time:%s | %s"),
224 fprintf(stdout,
"%s\n", message);
256 return rpass ? rpass->
ibuf :
nullptr;
281 void *exrhandle,
const char *colorspace,
bool predivide,
int rectx,
int recty)
365 std::swap(re->
result, *rr);
417 if (rv->
ibuf ==
nullptr) {
472 if (rv->
ibuf ==
nullptr) {
531 re = MEM_new<Render>(
"new render");
543 ViewRender *view_render = MEM_new<ViewRender>(
"new view render");
549#define MAX_SCENE_RENDER_NAME (MAX_ID_NAME + 1024 + 2)
580 return RenderGlobal.interactive_compositor_renders.lookup_or_add_cb(render_name, [&]() {
581 Render *render = MEM_new<Render>(
"New Interactive Compositor Render");
618 MEM_delete(view_render);
658 if (re->
engine !=
nullptr) {
750 Render *interactive_compositor_render =
751 RenderGlobal.interactive_compositor_renders.lookup_default(re->
name,
nullptr);
752 if (interactive_compositor_render) {
834 memcpy(to, from,
sizeof(*to));
846 const rcti *disprect)
904 bool have_layer =
false;
1096 const int orig_rectx = re->
rectx, orig_recty = re->
recty;
1126 re->
rectx = orig_rectx;
1127 re->
recty = orig_recty;
1142 if (camera ==
nullptr) {
1163 int winx = re->
winx, winy = re->
winy;
1201 if (node->is_muted()) {
1206 return reinterpret_cast<Scene *
>(node->
id);
1211 return reinterpret_cast<Scene *
>(node->
id);
1224 if (ntree ==
nullptr) {
1234 for (
const bNode *node : ntree->all_nodes()) {
1236 if (node_scene && node_scene == scene) {
1247 if (node_tree ==
nullptr) {
1251 for (
const bNode *node : node_tree->all_nodes()) {
1252 if (node->is_muted()) {
1258 if (node->is_group() && node->id) {
1284 if (node_scene == re->
scene) {
1289 if (scenes_rendered.
contains(node_scene)) {
1297 scenes_rendered.
add_new(node_scene);
1314 memcpy(&
i, &re->
i,
sizeof(
i));
1324 bool update_newframe =
false;
1348 update_newframe =
true;
1379 if (update_newframe) {
1386 if (!
G.background) {
1398 &compositor_render_context,
1404 ntree->
runtime->stats_draw =
nullptr;
1405 ntree->
runtime->test_break =
nullptr;
1406 ntree->
runtime->progress =
nullptr;
1413 if (re->
result !=
nullptr) {
1427 if (render_pass->ibuf) {
1446 if (rres.
ibuf !=
nullptr) {
1490 if (src ==
nullptr) {
1494 ImBuf *dst =
nullptr;
1525 static int recurs_depth = 0;
1528 int cfra = re->
r.
cfra;
1530 int view_id, tot_views;
1551 render_new_render_data(re->
main,
1563 for (view_id = 0; view_id < tot_views; view_id++) {
1564 context.view_id = view_id;
1565 out = render_give_ibuf(&context, cfra, 0);
1575 for (view_id = 0; view_id < tot_views; view_id++) {
1579 if (ibuf_arr[view_id]) {
1589 if (recurs_depth == 0) {
1628 bool render_seq =
false;
1662 if (re->
result !=
nullptr) {
1687 if (sce->
camera ==
nullptr) {
1690 if (sce->
camera ==
nullptr) {
1694 "No camera found in scene \"%s\" (used in compositing of scene \"%s\")",
1705 const bool ok = (camera_override !=
nullptr || scene->
camera !=
nullptr);
1715 bool active_view =
false;
1729 if (view_camera == camera) {
1734 "Camera \"%s\" is not a multi-view camera",
1753 if (camera_override ==
nullptr && scene->
camera ==
nullptr) {
1765 (strip->scene !=
nullptr))
1767 if (!strip->scene_camera) {
1768 if (!strip->scene->camera &&
1773 Object *
override = (strip->scene == scene) ? camera_override :
nullptr;
1796 for (
const bNode *node : ntree->all_nodes()) {
1800 if (node->is_group()) {
1833 if (
size_t(width) * height > (
size_t(max_texture_size) * max_texture_size) / 4) {
1846 const int scemode = scene->
r.
scemode;
1903 memset(&baker, 0,
sizeof(baker));
1905 baker.
scene = scene;
1934 const bool anim_init)
1962 disprect.
xmax = winx;
1963 disprect.
ymax = winy;
2063 const float subframe,
2064 const bool write_still)
2070 G.is_rendering =
true;
2072 scene->
r.
cfra = frame;
2076 re, &scene->
r, bmain, scene, single_layer, camera_override,
false,
false))
2079 memcpy(&rd, &scene->
r,
sizeof(rd));
2092 if (should_write && !
G.is_break) {
2095 printf(
"Error: can't write single images with a movie format!\n");
2106 &template_variables,
2137 G.is_rendering =
false;
2140#ifdef WITH_FREESTYLE
2143static void change_renderdata_engine(
Render *re,
const char *new_engine)
2154static bool use_eevee_for_freestyle_render(
Render *re)
2160void RE_RenderFreestyleStrokes(
Render *re,
Main *bmain,
Scene *scene,
const bool render)
2164 char scene_engine[32];
2166 if (use_eevee_for_freestyle_render(re)) {
2172 change_renderdata_engine(re, scene_engine);
2177void RE_RenderFreestyleExternal(
Render *re)
2215 MovieWriter **movie_writers,
2216 const int totvideos,
2233 for (view_id = 0; view_id < totvideos; view_id++) {
2239 BLI_assert(movie_writers[view_id] !=
nullptr);
2260 ImBuf *ibuf_arr[3] = {
nullptr};
2265 for (
i = 0;
i < 2;
i++) {
2292 for (
i = 0;
i < 3;
i++) {
2306 Render *re,
Main *bmain,
Scene *scene,
const int totvideos,
const char *filepath_override)
2318 if (do_write_file) {
2327 if (filepath_override) {
2328 STRNCPY(filepath, filepath_override);
2338 &template_variables,
2363 std::string message = fmt::format(
"Time: {}", filepath);
2365 if (do_write_file && ok) {
2368 message = fmt::format(
"{} (Saving: {})", message, filepath);
2372 printf(
"%s\n", message.c_str());
2382 fputc(
'\n', stdout);
2394 size_t width, height;
2435 memcpy(&rd, &scene->
r,
sizeof(rd));
2436 const int cfra_old = rd.
cfra;
2437 const float subframe_old = rd.
subframe;
2438 int nfra, totrendered = 0, totskipped = 0;
2457 if (is_movie && do_write_file) {
2458 size_t width, height;
2461 bool is_error =
false;
2463 for (
int i = 0;
i < totvideos;
i++) {
2473 if (writer ==
nullptr) {
2489 G.is_rendering =
true;
2495 for (nfra = sfra, scene->
r.
cfra = sfra; scene->
r.
cfra <= efra; scene->
r.
cfra++) {
2525 if (nfra != scene->
r.
cfra) {
2533 if (is_movie ==
false && do_write_file) {
2540 &template_variables,
2558 if (!is_multiview_name) {
2561 printf(
"skipping existing frame \"%s\"\n", filepath);
2568 bool is_skip =
false;
2581 "skipping existing frame \"%s\" for view \"%s\"\n", filepath_view, srv->name);
2594 if (!is_multiview_name) {
2630 if (!
G.is_break && should_write) {
2640 if (
G.is_break ==
true) {
2642 if (is_movie ==
false && do_write_file) {
2644 if (!is_multiview_name) {
2672 if (
G.is_break ==
false) {
2682 if (is_movie && do_write_file) {
2686 if (totskipped && totrendered == 0) {
2690 scene->
r.
cfra = cfra_old;
2702 G.is_rendering =
false;
2762 disprect.
xmax = winx;
2763 disprect.
ymax = winy;
2772 if (re ==
nullptr) {
2806 if (rpass ==
nullptr) {
2809 "%s: no Combined pass found in the render layer '%s'",
2815 if (ibuf->
x == layer->
rectx && ibuf->
y == layer->
recty) {
2822 sizeof(
float[4]) * layer->
rectx * layer->
recty);
2825 if ((ibuf->
x -
x >= layer->
rectx) && (ibuf->
y -
y >= layer->
recty)) {
2838 sizeof(
float[4]) * layer->
rectx * layer->
recty);
2843 reports,
RPT_ERROR,
"%s: failed to allocate clip buffer '%s'", __func__, filepath);
2849 "%s: incorrect dimensions for partial copy '%s'",
2885 if (!
STREQ(rp->name,
"Combined")) {
2896 if (
STREQ(rp->name, name)) {
2897 if (viewname ==
nullptr || viewname[0] ==
'\0') {
2900 if (
STREQ(rp->view, viewname)) {
2910#define CHECK_PASS(NAME) \
2911 if (passtype == SCE_PASS_##NAME) { \
2912 return RE_pass_find_by_name(rl, RE_PASSNAME_##NAME, viewname); \
AnimData * BKE_animdata_from_id(const ID *id)
AnimationEvalContext BKE_animsys_eval_context_construct(struct Depsgraph *depsgraph, float eval_time) ATTR_WARN_UNUSED_RESULT
void BKE_animsys_evaluate_animdata(struct ID *id, struct AnimData *adt, const struct AnimationEvalContext *anim_eval_context, eAnimData_Recalc recalc, bool flush_to_original)
void BKE_callback_exec_id(Main *bmain, ID *id, eCbEvent evt)
void BKE_callback_exec_string(Main *bmain, eCbEvent evt, const char *str)
@ BKE_CB_EVT_RENDER_COMPLETE
@ BKE_CB_EVT_RENDER_STATS
@ BKE_CB_EVT_RENDER_WRITE
@ BKE_CB_EVT_RENDER_CANCEL
Camera data-block and utility functions.
struct Object * BKE_camera_multiview_render(const struct Scene *scene, struct Object *camera, const char *viewname)
void BKE_imbuf_stamp_info(const RenderResult *rr, ImBuf *ibuf)
void BKE_stamp_info_from_imbuf(RenderResult *rr, ImBuf *ibuf)
StampData * BKE_stamp_data_copy(const StampData *stamp_data)
void BKE_render_result_stamp_info(Scene *scene, Object *camera, RenderResult *rr, bool allocate_only)
void BKE_image_all_free_anim_ibufs(Main *bmain, int cfra)
void BKE_image_stamp_buf(Scene *scene, Object *camera, const StampData *stamp_data_template, unsigned char *rect, float *rectf, int width, int height)
bool BKE_image_render_write(ReportList *reports, RenderResult *rr, const Scene *scene, const bool stamp, const char *filepath_basis, const ImageFormatData *format=nullptr, bool save_as_render=true)
Object * BKE_view_layer_camera_find(const Scene *scene, ViewLayer *view_layer)
ViewLayer * BKE_view_layer_context_active_PLACEHOLDER(const Scene *scene)
ViewLayer * BKE_view_layer_default_render(const Scene *scene)
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
#define CMP_NODE_COMPOSITE
#define CMP_NODE_CRYPTOMATTE
#define CMP_NODE_OUTPUT_FILE
#define CMP_NODE_R_LAYERS
void BKE_report_path_template_errors(ReportList *reports, eReportType report_type, blender::StringRef path, blender::Span< blender::bke::path_templates::Error > errors)
blender::bke::path_templates::VariableMap BKE_build_template_variables_for_render_path(const RenderData *render_data)
void BKE_ptcache_bake(struct PTCacheBaker *baker)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
void BKE_render_resolution(const RenderData *r, const bool use_crop, int *r_width, int *r_height)
float BKE_scene_ctime_get(const Scene *scene)
int BKE_scene_multiview_num_views_get(const RenderData *rd)
bool BKE_scene_multiview_is_render_view_active(const RenderData *rd, const SceneRenderView *srv)
const char * BKE_scene_multiview_view_id_suffix_get(const RenderData *rd, int view_id)
int BKE_render_num_threads(const RenderData *r)
bool BKE_scene_camera_switch_update(Scene *scene)
Depsgraph * BKE_scene_ensure_depsgraph(Main *bmain, Scene *scene, ViewLayer *view_layer)
float BKE_scene_frame_get(const Scene *scene)
void BKE_scene_multiview_videos_dimensions_get(const RenderData *rd, size_t width, size_t height, size_t *r_width, size_t *r_height)
void BKE_scene_update_sound(Depsgraph *depsgraph, Main *bmain)
int BKE_scene_multiview_num_videos_get(const RenderData *rd)
void BKE_scene_multiview_filepath_get(const SceneRenderView *srv, const char *filepath, char *r_filepath)
int BKE_scene_multiview_view_id_get(const RenderData *rd, const char *viewname)
void BKE_scene_ppm_get(const RenderData *rd, double r_ppm[2])
void BKE_sound_reset_scene_specs(struct Scene *scene)
File and directory operations.
bool BLI_file_touch(const char *filepath) ATTR_NONNULL(1)
int BLI_exists(const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
int BLI_delete(const char *path, bool dir, bool recursive) ATTR_NONNULL()
size_t BLI_file_size(const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
bool BLI_file_ensure_parent_dir_exists(const char *filepath) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void * BLI_findstring(const ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_freelinkN(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_BACKWARD(type, var, list)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_listbase_count_at_most(const ListBase *listbase, int count_max) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_findstringindex(const ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE void copy_v2_v2_db(double r[2], const double a[2])
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
char * BLI_sprintfN(const char *__restrict format,...) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_PRINTF_FORMAT(1
char * STRNCPY(char(&dst)[N], const char *src)
size_t BLI_snprintf(char *__restrict dst, size_t dst_maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
int bool bool BLI_str_endswith(const char *__restrict str, const char *__restrict end) ATTR_NONNULL(1
#define THREAD_LOCK_WRITE
void BLI_rw_mutex_lock(ThreadRWMutex *mutex, int mode)
int BLI_thread_is_main(void)
void BLI_rw_mutex_unlock(ThreadRWMutex *mutex)
Platform independent time functions.
double BLI_time_now_seconds(void)
size_t BLI_timecode_string_from_time_simple(char *str, size_t maxncpy, double time_seconds) ATTR_NONNULL()
#define STREQLEN(a, b, n)
void COM_execute(Render *render, RenderData *render_data, Scene *scene, bNodeTree *node_tree, const char *view_name, blender::compositor::RenderContext *render_context, blender::compositor::Profiler *profiler, blender::compositor::OutputTypes needed_outputs)
The main method that is used to execute the compositor tree. It can be executed during editing (blenk...
Depsgraph * DEG_graph_new(Main *bmain, Scene *scene, ViewLayer *view_layer, eEvaluationMode mode)
void DEG_graph_id_tag_update(Main *bmain, Depsgraph *depsgraph, ID *id, unsigned int flags)
void DEG_graph_free(Depsgraph *graph)
void DEG_evaluate_on_framechange(Depsgraph *graph, float frame, DepsgraphEvaluateSyncWriteback sync_writeback=DEG_EVALUATE_SYNC_WRITEBACK_NO)
void DEG_graph_build_for_render_pipeline(Depsgraph *graph)
void DEG_debug_name_set(Depsgraph *depsgraph, const char *name)
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
@ CMP_NODE_CRYPTOMATTE_SOURCE_RENDER
Object is a sort of wrapper for general info.
#define RE_PASSNAME_COMBINED
#define STEREO_RIGHT_NAME
@ SCE_COMPOSITOR_DEVICE_GPU
@ SCE_VIEWS_FORMAT_MULTIVIEW
void FRS_init_stroke_renderer(struct Render *re)
void FRS_end_stroke_rendering(struct Render *re)
void FRS_begin_stroke_rendering(struct Render *re)
int FRS_is_freestyle_enabled(struct ViewLayer *view_layer)
void FRS_do_stroke_rendering(struct Render *re, struct ViewLayer *view_layer)
int GPU_max_texture_size()
GPUContext * GPU_context_create(void *ghost_window, void *ghost_context)
void GPU_context_discard(GPUContext *)
void GPU_context_active_set(GPUContext *)
eGPUBackendType GPU_backend_get_type()
void IMB_colormanagement_transform_byte_to_float(float *float_buffer, unsigned char *byte_buffer, int width, int height, int channels, const char *from_colorspace, const char *to_colorspace)
ImBuf * IMB_colormanagement_imbuf_for_write(ImBuf *ibuf, bool save_as_render, bool allocate_result, const ImageFormatData *image_format)
@ COLOR_ROLE_SCENE_LINEAR
const char * IMB_colormanagement_role_colorspace_name_get(int role)
const char * IMB_colormanagement_get_rect_colorspace(ImBuf *ibuf)
ImBuf * IMB_load_image_from_filepath(const char *filepath, const int flags, char r_colorspace[IM_MAX_SPACE]=nullptr)
ImBuf * IMB_dupImBuf(const ImBuf *ibuf1)
void IMB_freeImBuf(ImBuf *ibuf)
ImBuf * IMB_stereo3d_ImBuf(const ImageFormatData *im_format, ImBuf *ibuf_left, ImBuf *ibuf_right)
ImBuf * IMB_allocImBuf(unsigned int x, unsigned int y, unsigned char planes, unsigned int flags)
bool IMB_alloc_float_pixels(ImBuf *ibuf, const unsigned int channels, bool initialize_pixels=true)
void IMB_rectcpy(ImBuf *dbuf, const ImBuf *sbuf, int destx, int desty, int srcx, int srcy, int width, int height)
void IMB_float_from_byte(ImBuf *ibuf)
Read Guarded memory(de)allocation.
@ RE_USE_CUSTOM_FREESTYLE
BPy_StructRNA * depsgraph
void append(const T &value)
void reserve(const int64_t min_capacity)
bool contains(const Key &key) const
void add_new(const Key &key)
void save_file_outputs(Scene *scene)
#define ID_IS_LINKED(_id)
void RE_SetCamera(Render *re, const Object *cam_ob)
Object * RE_GetCamera(Render *re)
bool RE_engine_use_persistent_data(RenderEngine *engine)
RenderEngineType * RE_engines_find(const char *idname)
RenderEngine * RE_engine_create(RenderEngineType *type)
bool RE_engine_render(Render *re, bool do_all)
void RE_engine_free(RenderEngine *engine)
size_t(* MEM_get_peak_memory)(void)
void(* MEM_reset_peak_memory)(void)
size_t(* MEM_get_memory_in_use)(void)
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
MovieWriter * MOV_write_begin(const char imtype, const Scene *scene, RenderData *rd, int rectx, int recty, ReportList *reports, bool preview, const char *suffix)
void MOV_write_end(MovieWriter *writer)
bool MOV_write_append(MovieWriter *writer, RenderData *rd, int start_frame, int frame, const ImBuf *image, const char *suffix, ReportList *reports)
bool render_is_muted(const ListBase *channels, const Strip *strip)
void cache_cleanup(Scene *scene)
void render_imbuf_from_sequencer_space(const Scene *scene, ImBuf *ibuf)
void relations_free_imbuf(Scene *scene, ListBase *seqbase, bool for_render)
void RE_compositor_free(Render &render)
bool render_result_exr_file_read_path(RenderResult *rr, RenderLayer *rl_single, ReportList *reports, const char *filepath)
void render_result_single_layer_end(Render *re)
void render_result_free_gpu_texture_caches(RenderResult *rr)
bool render_result_exr_file_cache_read(Render *re)
void RE_render_result_rect_from_ibuf(RenderResult *rr, const ImBuf *ibuf, const int view_id)
void render_result_rect_fill_zero(RenderResult *rr, const int view_id)
void render_result_views_shallowdelete(RenderResult *rr)
void render_result_views_new(RenderResult *rr, const RenderData *rd)
void render_result_merge(RenderResult *rr, RenderResult *rrpart)
void render_result_view_new(RenderResult *rr, const char *viewname)
RenderPass * render_layer_add_pass(RenderResult *rr, RenderLayer *rl, int channels, const char *name, const char *viewname, const char *chan_id, const bool allocate)
ImBuf * RE_render_result_rect_to_ibuf(RenderResult *rr, const ImageFormatData *imf, const float dither, const int view_id)
void render_result_passes_allocated_ensure(RenderResult *rr)
void render_result_free(RenderResult *rr)
RenderResult * render_result_new_from_exr(void *exrhandle, const char *colorspace, bool predivide, int rectx, int recty)
void render_result_clone_passes(Render *re, RenderResult *rr, const char *viewname)
RenderView * RE_RenderViewGetById(RenderResult *rr, const int view_id)
void render_result_single_layer_begin(Render *re)
void render_result_rect_get_pixels(RenderResult *rr, uint *rect, int rectx, int recty, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const int view_id)
RenderResult * render_result_new(Render *re, const rcti *partrct, const char *layername, const char *viewname)
void render_result_views_shallowcopy(RenderResult *dst, RenderResult *src)
const char * RE_engine_id_BLENDER_EEVEE_NEXT
static void stats_background(void *, RenderStats *rs)
bool RE_HasSingleLayer(Render *re)
void RE_ReleaseResultImageViews(Render *re, RenderResult *rr)
void RE_stats_draw_cb(Render *re, void *handle, void(*f)(void *handle, RenderStats *rs))
static bool node_tree_has_composite_output(const bNodeTree *node_tree)
static void float_nothing(void *, float)
static void stats_nothing(void *, RenderStats *)
static void re_free_persistent_data(Render *re)
void RE_FreeRender(Render *re)
static void result_nothing(void *, RenderResult *)
static void do_render_engine(Render *re)
RenderResult * RE_MultilayerConvert(void *exrhandle, const char *colorspace, bool predivide, int rectx, int recty)
void * RE_blender_gpu_context_ensure(Render *re)
void RE_ReleaseResultImage(Render *re)
void RE_progress_cb(Render *re, void *handle, void(*f)(void *handle, float))
void RE_PreviewRender(Render *re, Main *bmain, Scene *sce)
void RE_test_break_cb(Render *re, void *handle, bool(*f)(void *handle))
void * RE_system_gpu_context_get(Render *re)
static bool node_tree_has_any_compositor_output(const bNodeTree *ntree)
RenderPass * RE_pass_find_by_type(RenderLayer *rl, int passtype, const char *viewname)
static bool default_break(void *)
static ImBuf * seq_process_render_image(ImBuf *src, const ImageFormatData &im_format, const Scene *scene)
static void do_render_compositor_scenes(Render *re)
static void do_render_compositor_scene(Render *re, Scene *sce, int cfra)
void RE_current_scene_update_cb(Render *re, void *handle, void(*f)(void *handle, Scene *scene))
static bool seq_result_needs_float(const ImageFormatData &im_format)
void RE_FreeUnusedGPUResources()
RenderPass * RE_pass_find_by_name(RenderLayer *rl, const char *name, const char *viewname)
void RE_prepare_viewlayer_cb(Render *re, void *handle, bool(*f)(void *handle, ViewLayer *vl, Depsgraph *depsgraph))
void RE_InitState(Render *re, Render *source, RenderData *rd, ListBase *, ViewLayer *single_layer, int winx, int winy, const rcti *disprect)
void render_copy_renderdata(RenderData *to, RenderData *from)
void RE_FreeAllPersistentData()
void RE_ResultGet32(Render *re, uint *rect)
void RE_FreePersistentData(const Scene *scene)
static Scene * get_scene_referenced_by_node(const bNode *node)
static bool check_valid_camera_multiview(Scene *scene, Object *camera, ReportList *reports)
static void re_init_resolution(Render *re, Render *source, int winx, int winy, const rcti *disprect)
std::forward_list< Render * > render_list
static void render_update_depsgraph(Render *re)
void RE_AcquireResultImage(Render *re, RenderResult *rr, const int view_id)
Render * RE_NewRender(const char *name)
static int check_compositor_output(Scene *scene)
void RE_layer_load_from_file(RenderLayer *layer, ReportList *reports, const char *filepath, int x, int y)
#define MAX_SCENE_RENDER_NAME
void RE_ClearResult(Render *re)
void RE_SwapResult(Render *re, RenderResult **rr)
void RE_FreeAllRenderResults()
void RE_FreeRenderResult(RenderResult *rr)
ImBuf * RE_RenderLayerGetPassImBuf(RenderLayer *rl, const char *name, const char *viewname)
Render * RE_NewInteractiveCompositorRender(const Scene *scene)
RenderResult * RE_AcquireResultWrite(Render *re)
static void render_pipeline_free(Render *re)
void RE_InitRenderCB(Render *re)
static void current_scene_nothing(void *, Scene *)
void RE_RenderFrame(Render *re, Main *bmain, Scene *scene, ViewLayer *single_layer, Object *camera_override, const int frame, const float subframe, const bool write_still)
static int check_valid_camera(Scene *scene, Object *camera_override, ReportList *reports)
static void scene_render_name_get(const Scene *scene, const size_t max_size, char *render_name)
blender::Map< std::string, Render * > interactive_compositor_renders
static void render_result_uncrop(Render *re)
void RE_ReferenceRenderResult(RenderResult *rr)
Render * RE_NewSceneRender(const Scene *scene)
static struct @305241275077233234061367255102076077207040373226 RenderGlobal
Scene * RE_GetScene(Render *re)
Render * RE_GetRender(const char *name)
static bool is_compositing_possible_on_gpu(Scene *scene, ReportList *reports)
void RE_blender_gpu_context_free(Render *re)
static void render_result_disprect_to_full_resolution(Render *re)
static void render_callback_exec_string(Render *re, Main *bmain, eCbEvent evt, const char *str)
bool RE_seq_render_active(Scene *scene, RenderData *rd)
bool RE_passes_have_name(RenderLayer *rl)
static void do_render_sequencer(Render *re)
RenderResult * RE_AcquireResultRead(Render *re)
void RE_FreeInteractiveCompositorRenders()
RenderLayer * RE_GetRenderLayer(RenderResult *rr, const char *name)
void RE_ReleaseResult(Render *re)
const char * RE_GetActiveRenderView(Render *re)
static void render_compositor_stats(void *arg, const char *str)
void RE_RenderAnim(Render *re, Main *bmain, Scene *scene, ViewLayer *single_layer, Object *camera_override, int sfra, int efra, int tfra)
static void do_render_full_pipeline(Render *re)
static bool render_init_from_main(Render *re, const RenderData *rd, Main *bmain, Scene *scene, ViewLayer *single_layer, Object *camera_override, const bool anim, const bool anim_init)
static void re_movie_free_all(Render *re)
static void do_render_compositor(Render *re)
void RE_system_gpu_context_ensure(Render *re)
bool RE_ResultIsMultiView(RenderResult *rr)
void RE_display_clear_cb(Render *re, void *handle, void(*f)(void *handle, RenderResult *rr))
void RE_FreeGPUTextureCaches()
bool RE_layers_have_name(RenderResult *result)
bool RE_allow_render_generic_object(Object *ob)
void RE_result_load_from_file(RenderResult *result, ReportList *reports, const char *filepath)
void RE_display_update_cb(Render *re, void *handle, void(*f)(void *handle, RenderResult *rr, rcti *rect))
static void get_videos_dimensions(const Render *re, const RenderData *rd, size_t *r_width, size_t *r_height)
bool RE_WriteRenderViewsMovie(ReportList *reports, RenderResult *rr, Scene *scene, RenderData *rd, MovieWriter **movie_writers, const int totvideos, bool preview)
static bool compositor_needs_render(Scene *scene)
static void renderresult_stampinfo(Render *re)
static void render_init_depsgraph(Render *re)
static bool do_write_image_or_movie(Render *re, Main *bmain, Scene *scene, const int totvideos, const char *filepath_override)
ViewRender * RE_NewViewRender(RenderEngineType *engine_type)
Render * RE_GetSceneRender(const Scene *scene)
bool RE_is_rendering_allowed(Scene *scene, ViewLayer *single_layer, Object *camera_override, ReportList *reports)
RenderStats * RE_GetStats(Render *re)
static void renderresult_set_passes_metadata(Render *re)
static void update_physics_cache(Render *re, Scene *scene, ViewLayer *view_layer, const bool)
void RE_draw_lock_cb(Render *re, void *handle, void(*f)(void *handle, bool lock))
void RE_SetReports(Render *re, ReportList *reports)
void RE_AcquireResultImageViews(Render *re, RenderResult *rr)
static bool render_scene_has_layers_to_render(Scene *scene, ViewLayer *single_layer)
bool RE_ReadRenderResult(Scene *scene, Scene *scenode)
void RE_SetScene(Render *re, Scene *sce)
float * RE_RenderLayerGetPass(RenderLayer *rl, const char *name, const char *viewname)
void RE_system_gpu_context_free(Render *re)
static void render_callback_exec_id(Render *re, Main *bmain, ID *id, eCbEvent evt)
void RE_FreeViewRender(ViewRender *view_render)
static bool check_valid_compositing_camera(Scene *scene, Object *camera_override, ReportList *reports)
static void result_rcti_nothing(void *, RenderResult *, rcti *)
void RE_SetActiveRenderView(Render *re, const char *viewname)
RenderLayer * render_get_single_layer(Render *re, RenderResult *rr)
RenderPass * RE_create_gp_pass(RenderResult *rr, const char *layername, const char *viewname)
void RE_init_threadcount(Render *re)
static bool prepare_viewlayer_nothing(void *, ViewLayer *, Depsgraph *)
static void re_gpu_texture_caches_free(Render *re)
void RE_display_init_cb(Render *re, void *handle, void(*f)(void *handle, RenderResult *rr))
struct RenderEngine * engine
ThreadRWMutex resultmutex
ImBufFloatBuffer float_buffer
ImBufByteBuffer byte_buffer
struct Depsgraph * depsgraph
struct ViewLayer * view_layer
struct CurveMapping mblur_shutter_curve
struct ImageFormatData im_format
struct StampData * stamp_data
void * blender_gpu_context
Scene * pipeline_scene_eval
bool(* prepare_viewlayer_cb)(void *handle, struct ViewLayer *vl, struct Depsgraph *depsgraph)
void display_update(RenderResult *render_result, rcti *rect) override
bool test_break() override
bool result_has_gpu_texture_caches
RenderResult * pushedresult
blender::render::Compositor * compositor
void * system_gpu_context
void(* current_scene_update_cb)(void *handle, struct Scene *scene)
void(* progress_cb)(void *handle, float i)
void display_init(RenderResult *render_result) override
void(* display_init_cb)(void *handle, RenderResult *rr)
struct Depsgraph * pipeline_depsgraph
void progress(float progress) override
void(* display_clear_cb)(void *handle, RenderResult *rr)
bool(* test_break_cb)(void *handle)
char single_view_layer[MAX_NAME]
void display_clear(RenderResult *render_result) override
void current_scene_update(struct Scene *scene) override
struct ReportList * reports
struct Object * camera_override
void(* draw_lock_cb)(void *handle, bool lock)
void(* display_update_cb)(void *handle, RenderResult *rr, rcti *rect)
void(* stats_draw_cb)(void *handle, RenderStats *ri)
blender::Vector< MovieWriter * > movie_writers
void stats_draw(RenderStats *render_stats) override
struct bNodeTree * nodetree
ColorManagedViewSettings view_settings
ColorManagedDisplaySettings display_settings
struct bNodeTree * nodetree
bNodeTreeRuntimeHandle * runtime
void RE_point_density_fix_linking()
bool WM_jobs_test(const wmWindowManager *wm, const void *owner, int job_type)
void * WM_system_gpu_context_create()
void wm_window_reset_drawable()
void WM_system_gpu_context_dispose(void *context)
void WM_system_gpu_context_activate(void *context)
Scene * WM_window_get_active_scene(const wmWindow *win)
void WM_system_gpu_context_release(void *context)
bScreen * WM_window_get_active_screen(const wmWindow *win)