15#include <forward_list>
178 Render *re,
Main *bmain,
Scene *scene,
const int totvideos,
const char *filepath_override);
187 return G.is_break ==
true;
232 return rpass ? rpass->
ibuf :
nullptr;
257 ExrHandle *exrhandle,
const char *colorspace,
bool predivide,
int rectx,
int recty)
299 if (re->
owner == owner) {
341 std::swap(re->
result, *rr);
393 if (rv->
ibuf ==
nullptr) {
448 if (rv->
ibuf ==
nullptr) {
507 re = MEM_new<Render>(
"new render");
519 ViewRender *view_render = MEM_new<ViewRender>(
"new view render");
538 return RenderGlobal.interactive_compositor_renders.lookup_or_add_cb(owner, [&]() {
539 Render *render = MEM_new<Render>(
"New Interactive Compositor Render");
540 render->
owner = owner;
554 MEM_delete(view_render);
594 if (re->
engine !=
nullptr) {
652 if (scene != re->
owner) {
691 Render *interactive_compositor_render =
693 if (interactive_compositor_render) {
776 memcpy(to, from,
sizeof(*to));
788 const rcti *disprect)
846 bool have_layer =
false;
890 re->
display->display_update_cb = f;
895 re->
display->current_scene_update_cb = f;
900 re->
display->stats_draw_cb = f;
917 re->
display->test_break_cb = f;
938 re->
display = std::make_shared<RenderDisplay>();
954 re->
display->ensure_system_gpu_context();
961 if (parent_re ==
nullptr || re == parent_re) {
1019 const int orig_rectx = re->
rectx, orig_recty = re->
recty;
1048 re->
rectx = orig_rectx;
1049 re->
recty = orig_recty;
1064 if (camera ==
nullptr) {
1085 int winx = re->
winx, winy = re->
winy;
1117 if (node->is_muted()) {
1122 return reinterpret_cast<Scene *
>(node->
id);
1127 return reinterpret_cast<Scene *
>(node->
id);
1140 if (ntree ==
nullptr) {
1147 for (
const bNode *node : ntree->all_nodes()) {
1149 if (node_scene && node_scene == scene) {
1160 if (node_tree ==
nullptr) {
1164 node_tree->ensure_topology_cache();
1165 for (
const bNode *node : node_tree->nodes_by_type(
"NodeGroupOutput")) {
1191 if (node_scene == re->
scene) {
1196 if (scenes_rendered.
contains(node_scene)) {
1204 scenes_rendered.
add_new(node_scene);
1221 memcpy(&
i, &re->
i,
sizeof(
i));
1231 bool update_newframe =
false;
1255 update_newframe =
true;
1271 if (!re->
display->test_break()) {
1278 if (!re->
display->test_break()) {
1286 if (update_newframe) {
1293 if (!
G.background) {
1307 &compositor_render_context,
1313 ntree->
runtime->stats_draw =
nullptr;
1314 ntree->
runtime->test_break =
nullptr;
1315 ntree->
runtime->progress =
nullptr;
1322 if (re->
result !=
nullptr) {
1336 if (render_pass->ibuf) {
1355 if (rres.
ibuf !=
nullptr) {
1396 if (src ==
nullptr) {
1400 ImBuf *dst =
nullptr;
1431 static int recurs_depth = 0;
1434 int cfra = re->
r.
cfra;
1436 int view_id, tot_views;
1459 render_new_render_data(re->
main,
1471 for (view_id = 0; view_id < tot_views; view_id++) {
1472 context.view_id = view_id;
1473 out = render_give_ibuf(&context, cfra, 0);
1483 for (view_id = 0; view_id < tot_views; view_id++) {
1487 if (ibuf_arr[view_id]) {
1497 if (recurs_depth == 0) {
1536 bool render_seq =
false;
1553 if (!re->
display->test_break()) {
1570 if (re->
result !=
nullptr) {
1595 if (sce->
camera ==
nullptr) {
1598 if (sce->
camera ==
nullptr) {
1602 "No camera found in scene \"%s\" (used in compositing of scene \"%s\")",
1613 const bool ok = (camera_override !=
nullptr || scene->
camera !=
nullptr);
1623 bool active_view =
false;
1637 if (view_camera == camera) {
1642 "Camera \"%s\" is not a multi-view camera",
1661 if (camera_override ==
nullptr && scene->
camera ==
nullptr) {
1673 (strip->scene !=
nullptr))
1675 if (!strip->scene_camera) {
1676 if (!strip->scene->camera &&
1681 Object *
override = (strip->scene == scene) ? camera_override :
nullptr;
1704 node_tree->ensure_topology_cache();
1705 for (
const bNode *node : node_tree->nodes_by_type(
"CompositorNodeOutputFile")) {
1706 if (!node->is_muted()) {
1711 for (
const bNode *node : node_tree->group_nodes()) {
1712 if (node->is_muted() || !node->id) {
1744 BKE_report(reports,
RPT_ERROR,
"Render size too large for GPU, use CPU compositor instead");
1756 const int scemode = scene->
r.
scemode;
1808 memset(&baker, 0,
sizeof(baker));
1810 baker.
scene = scene;
1839 const bool anim_init)
1867 disprect.
xmax = winx;
1868 disprect.
ymax = winy;
1964 const float subframe,
1965 const bool write_still)
1971 G.is_rendering =
true;
1973 scene->
r.
cfra = frame;
1977 re, &scene->
r, bmain, scene, single_layer, camera_override,
false,
false))
1980 memcpy(&rd, &scene->
r,
sizeof(rd));
1993 if (should_write && !
G.is_break) {
1996 printf(
"Error: cannot write single images with a movie format!\n");
2009 &template_variables,
2040 G.is_rendering =
false;
2043#ifdef WITH_FREESTYLE
2046static void change_renderdata_engine(
Render *re,
const char *new_engine)
2057static bool use_eevee_for_freestyle_render(
Render *re)
2063void RE_RenderFreestyleStrokes(
Render *re,
Main *bmain,
Scene *scene,
const bool render)
2067 char scene_engine[32];
2069 if (use_eevee_for_freestyle_render(re)) {
2075 change_renderdata_engine(re, scene_engine);
2080void RE_RenderFreestyleExternal(
Render *re)
2082 if (re->
display->test_break()) {
2118 MovieWriter **movie_writers,
2119 const int totvideos,
2136 for (view_id = 0; view_id < totvideos; view_id++) {
2142 BLI_assert(movie_writers[view_id] !=
nullptr);
2163 ImBuf *ibuf_arr[3] = {
nullptr};
2168 for (
i = 0;
i < 2;
i++) {
2197 for (
i = 0;
i < 3;
i++) {
2211 Render *re,
Main *bmain,
Scene *scene,
const int totvideos,
const char *filepath_override)
2223 if (do_write_file) {
2232 if (filepath_override) {
2233 STRNCPY(filepath, filepath_override);
2245 &template_variables,
2270 std::string message = fmt::format(
"Time: {}", filepath);
2272 if (do_write_file && ok) {
2275 message = fmt::format(
"{} (Saving: {})", message, filepath);
2302 size_t width, height;
2336 CLOG_ERROR(&
LOG,
"Couldn't create directory for file %s: %s", filepath, std::strerror(errno));
2340 CLOG_ERROR(&
LOG,
"Couldn't touch file %s: %s", filepath, std::strerror(errno));
2355 CLOG_INFO(&
LOG,
"Rendering single frame (frame %d)", sfra);
2358 CLOG_INFO(&
LOG,
"Rendering animation (frames %d..%d)", sfra, efra);
2366 memcpy(&rd, &scene->
r,
sizeof(rd));
2367 const int cfra_old = rd.
cfra;
2368 const float subframe_old = rd.
subframe;
2369 int nfra, totrendered = 0, totskipped = 0;
2393 if (is_movie && do_write_file) {
2394 size_t width, height;
2397 bool is_error =
false;
2399 for (
int i = 0;
i < totvideos;
i++) {
2409 if (writer ==
nullptr) {
2426 G.is_rendering =
true;
2432 for (nfra = sfra, scene->
r.
cfra = sfra; scene->
r.
cfra <= efra; scene->
r.
cfra++) {
2462 if (nfra != scene->
r.
cfra) {
2470 if (is_movie ==
false && do_write_file) {
2479 &template_variables,
2497 if (!is_multiview_name) {
2499 CLOG_INFO(&
LOG,
"Skipping existing frame \"%s\"", filepath);
2505 bool is_skip =
false;
2517 "Skipping existing frame \"%s\" for view \"%s\"",
2531 if (!is_multiview_name) {
2560 if (re->
display->test_break() == 0) {
2561 if (!
G.is_break && should_write) {
2571 if (
G.is_break ==
true) {
2573 if (is_movie ==
false && do_write_file) {
2575 if (!is_multiview_name) {
2603 if (
G.is_break ==
false) {
2613 if (is_movie && do_write_file) {
2619 if (totskipped && totrendered == 0) {
2623 scene->
r.
cfra = cfra_old;
2635 G.is_rendering =
false;
2695 disprect.
xmax = winx;
2696 disprect.
ymax = winy;
2705 if (re ==
nullptr) {
2739 if (rpass ==
nullptr) {
2742 "%s: no Combined pass found in the render layer '%s'",
2748 if (ibuf->
x == layer->
rectx && ibuf->
y == layer->
recty) {
2755 sizeof(
float[4]) * layer->
rectx * layer->
recty);
2758 if ((ibuf->
x -
x >= layer->
rectx) && (ibuf->
y -
y >= layer->
recty)) {
2771 sizeof(
float[4]) * layer->
rectx * layer->
recty);
2776 reports,
RPT_ERROR,
"%s: failed to allocate clip buffer '%s'", __func__, filepath);
2782 "%s: incorrect dimensions for partial copy '%s'",
2818 if (!
STREQ(rp->name,
"Combined")) {
2830 if (viewname ==
nullptr || viewname[0] ==
'\0') {
2833 if (
STREQ(rp->view, 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, ImBuf *ibuf)
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_CRYPTOMATTE
#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)
void BKE_add_template_variables_for_render_path(blender::bke::path_templates::VariableMap &variables, const Scene &scene)
void BKE_add_template_variables_general(blender::bke::path_templates::VariableMap &variables, const ID *path_owner_id)
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)
void BKE_scene_multiview_videos_dimensions_get(const RenderData *rd, const ImageFormatData *imf, size_t width, size_t height, size_t *r_width, size_t *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)
int BKE_scene_multiview_num_videos_get(const RenderData *rd, const ImageFormatData *imf)
void BKE_scene_update_sound(Depsgraph *depsgraph, Main *bmain)
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 * STRNCPY(char(&dst)[N], const char *src)
int bool bool BLI_str_endswith(const char *__restrict str, const char *__restrict end) ATTR_NONNULL(1
#define STRNCPY_UTF8(dst, src)
#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 CLOG_ERROR(clg_ref,...)
#define CLOG_CHECK(clg_ref, verbose_level,...)
#define CLOG_STR_INFO(clg_ref, str)
#define CLOG_INFO(clg_ref,...)
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)
ID * DEG_get_original_id(ID *id)
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_VIEWS_FORMAT_MULTIVIEW
@ SCE_COMPOSITOR_DEVICE_GPU
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)
bool GPU_is_safe_texture_size(int width, int height)
GPUBackendType 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)
const char * IMB_colormanagement_get_rect_colorspace(const ImBuf *ibuf)
@ COLOR_ROLE_SCENE_LINEAR
ImBuf * IMB_colormanagement_imbuf_for_write(ImBuf *ibuf, bool save_as_render, bool allocate_result, const ImageFormatData *image_format)
const char * IMB_colormanagement_role_colorspace_name_get(int role)
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)
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)
void(* MEM_reset_peak_memory)(void)
void * MEM_callocN(size_t len, const char *str)
void MOV_write_end(MovieWriter *writer)
MovieWriter * MOV_write_begin(const Scene *scene, const RenderData *rd, const ImageFormatData *imf, int rectx, int recty, ReportList *reports, bool preview, const char *suffix)
bool MOV_write_append(MovieWriter *writer, const Scene *scene, const RenderData *rd, const ImageFormatData *imf, 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)
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)
RenderResult * render_result_new_from_exr(ExrHandle *exrhandle, const char *colorspace, bool predivide, int rectx, int recty)
void render_result_views_shallowcopy(RenderResult *dst, RenderResult *src)
const char * RE_engine_id_BLENDER_EEVEE
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 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 bool node_tree_has_group_output(const bNodeTree *node_tree)
static void do_render_engine(Render *re)
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)
RenderResult * RE_MultilayerConvert(ExrHandle *exrhandle, const char *colorspace, bool predivide, int rectx, int recty)
void RE_test_break_cb(Render *re, void *handle, bool(*f)(void *handle))
static void get_videos_dimensions(const Render *re, const RenderData *rd, const ImageFormatData *imf, size_t *r_width, size_t *r_height)
void * RE_system_gpu_context_get(Render *re)
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)
static bool node_tree_has_file_output(const bNodeTree *node_tree)
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 void *owner)
void RE_layer_load_from_file(RenderLayer *layer, ReportList *reports, const char *filepath, int x, int y)
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)
static bool scene_has_compositor_output(Scene *scene)
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 render_result_uncrop(Render *re)
void RE_ReferenceRenderResult(RenderResult *rr)
void RE_display_free(Render *re)
Render * RE_NewSceneRender(const Scene *scene)
Scene * RE_GetScene(Render *re)
static bool is_compositing_possible_on_gpu(Scene *scene, ReportList *reports)
void RE_display_ensure_gpu_context(Render *re)
blender::Map< const void *, Render * > interactive_compositor_renders
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_display_init(Render *re)
void RE_ReleaseResult(Render *re)
static struct @370044371030232304352252035216052377043321026353 RenderGlobal
const char * RE_GetActiveRenderView(Render *re)
static void touch_file(const char *filepath)
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)
bool RE_ResultIsMultiView(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))
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)
void RE_display_share(Render *re, const Render *parent_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)
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)
Render * RE_GetRender(const void *owner)
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 void re_gpu_texture_caches_free(Render *re)
struct RenderEngine * engine
ThreadRWMutex resultmutex
std::shared_ptr< RenderDisplay > display
ImBufFloatBuffer float_buffer
ImBufByteBuffer byte_buffer
struct Depsgraph * depsgraph
struct ViewLayer * view_layer
struct CurveMapping mblur_shutter_curve
struct ImageFormatData im_format
void * system_gpu_context
void * ensure_blender_gpu_context()
struct StampData * stamp_data
Scene * pipeline_scene_eval
bool(* prepare_viewlayer_cb)(void *handle, struct ViewLayer *vl, struct Depsgraph *depsgraph)
bool result_has_gpu_texture_caches
RenderResult * pushedresult
blender::render::Compositor * compositor
struct Depsgraph * pipeline_depsgraph
char single_view_layer[MAX_NAME]
struct ReportList * reports
struct Object * camera_override
blender::Vector< MovieWriter * > movie_writers
ColorManagedViewSettings view_settings
struct bNodeTree * compositing_node_group
ColorManagedDisplaySettings display_settings
struct bNodeTree * nodetree
bNodeTreeRuntimeHandle * runtime
bool WM_jobs_test(const wmWindowManager *wm, const void *owner, int job_type)
Scene * WM_window_get_active_scene(const wmWindow *win)
bScreen * WM_window_get_active_screen(const wmWindow *win)