111 int tile_y, tile_height, tile_x, tile_width;
122 tile_x = renrect->
xmin;
123 tile_width = renrect->
xmax - tile_x;
124 if (tile_width < 2) {
128 tile_y = renrect->
ymin;
129 tile_height = renrect->
ymax - tile_y;
130 if (tile_height < 2) {
137 tile_width = rr->
rectx;
138 tile_height = rr->
recty;
143 if (offset_x >= ibuf->
x) {
147 if (offset_y >= ibuf->
y) {
151 if (offset_x + tile_width > ibuf->
x) {
152 tile_width = ibuf->
x - offset_x;
154 if (offset_y + tile_height > ibuf->
y) {
155 tile_height = ibuf->
y - offset_y;
158 if (tile_width < 1 || tile_height < 1) {
162 r_ibuf_rect->
xmax = tile_x + tile_width;
163 r_ibuf_rect->
ymax = tile_y + tile_height;
164 r_ibuf_rect->
xmin = tile_x;
165 r_ibuf_rect->
ymin = tile_y;
166 *r_offset_x = offset_x;
167 *r_offset_y = offset_y;
175 const rcti *tile_rect,
178 const char *viewname)
181 const float *rectf =
nullptr;
182 int linear_stride, linear_offset_x, linear_offset_y;
204 if (iuser->
pass == 0) {
208 if (rv->
ibuf ==
nullptr) {
225 if (rr->
renlay ==
nullptr) {
230 if (rectf ==
nullptr) {
234 rectf += 4 * (rr->
rectx * tile_rect->
ymin + tile_rect->
xmin);
235 linear_stride = rr->
rectx;
236 linear_offset_x = offset_x;
237 linear_offset_y = offset_y;
241 linear_stride = ibuf->
x;
246 view_settings = &scene->view_settings;
247 display_settings = &scene->display_settings;
281 scn->
r.
cfra = (*scene)->r.cfra;
299 else if (((*scene)->r.scemode &
R_SINGLE_LAYER) && active_layer) {
300 *single_layer = active_layer;
320 if (re_type->
render ==
nullptr) {
329 op->
reports,
RPT_ERROR,
"Cannot write a single file with an animation format selected");
360 scene->r.frame_step);
375 const bool cancelled =
G.is_break;
379 if (rr && rr->
error) {
409 const bool v3d_override,
413 const char *info_space =
" ";
414 const char *info_sep =
"| ";
417 char time_elapsed[32];
422 const char *ret_array[32];
428 const float megs_used_memory = (
mem_in_use) / (1024.0 * 1024.0);
429 const float megs_peak_memory = (peak_memory) / (1024.0 * 1024.0);
433 ret_array[i++] =
RPT_(
"3D Local View ");
434 ret_array[i++] = info_sep;
436 else if (v3d_override) {
437 ret_array[i++] =
RPT_(
"3D View ");
438 ret_array[i++] = info_sep;
442 SNPRINTF(info_buffers.frame,
"%d ", scene->r.cfra);
443 ret_array[i++] =
RPT_(
"Frame:");
444 ret_array[i++] = info_buffers.frame;
447 const char *info_time = info_buffers.time_last;
449 info_buffers.time_last,
sizeof(info_buffers.time_last), rs->
lastframetime);
451 ret_array[i++] = info_sep;
454 ret_array[i++] =
"Last:";
455 ret_array[i++] = info_buffers.time_last;
456 ret_array[i++] = info_space;
459 info_time = info_buffers.time_elapsed;
461 sizeof(info_buffers.time_elapsed),
465 ret_array[i++] =
RPT_(
"Time:");
466 ret_array[i++] = info_time;
467 ret_array[i++] = info_space;
471 const char *info_statistics =
nullptr;
480 RPT_(
"Mem:%.2fM (Peak %.2fM)"),
488 info_statistics = info_buffers.statistics;
491 if (info_statistics) {
492 ret_array[i++] = info_sep;
493 ret_array[i++] = info_statistics;
494 ret_array[i++] = info_space;
500 const char *info_extra =
nullptr;
509 ret_array[i++] = info_sep;
510 ret_array[i++] = info_extra;
511 ret_array[i++] = info_space;
517 printf(
"WARNING! renderwin text beyond limit\n");
521 BLI_assert(i <
int(BOUNDED_ARRAY_TYPE_SIZE<
decltype(ret_array)>()));
534 if (rr->
text ==
nullptr) {
566 ScrArea *first_area =
nullptr, *matched_area =
nullptr;
572 wm && matched_area ==
nullptr;
576 for (win =
static_cast<wmWindow *
>(wm->windows.first); win && matched_area ==
nullptr;
585 if (sima !=
nullptr && sima->
image == rj->
image) {
586 if (first_area ==
nullptr) {
589 if (area == rj->
area) {
599 if (matched_area ==
nullptr) {
600 matched_area = first_area;
746 if (area == rj->
area) {
810 G.is_rendering =
false;
902 switch (event->
type) {
930 object->
id.
tag &= ~ID_TAG_DOIT;
985 if (re_type->
render ==
nullptr) {
1003 op->
reports,
RPT_ERROR,
"Cannot write a single file with an animation format selected");
1035 rj = MEM_cnew<RenderJob>(
"render job");
1046 rj->
anim = is_animation;
1047 rj->
write_still = is_write_still && !is_animation;
1064 if (camera_override && camera_override != scene->camera) {
1070 if (scene->r.use_lock_interface) {
1089 name =
"Sequence Render";
1141 G.is_rendering =
true;
1173 "Render files from the animation range of this scene");
1180 "Save the rendered image to the output path (used only when animation is disabled)");
1185 "When inside a 3D viewport, use layers and camera of the viewport");
1192 "Single render layer to re-render (used only when animation is disabled)");
1199 "Scene to render, current scene if not specified");
1232 CurveMapping *mblur_shutter_curve = &scene->r.mblur_shutter_curve;
1236 mblur_shutter_curve->
flag &= ~CUMA_EXTEND_EXTRAPOLATE;
1237 mblur_shutter_curve->
preset = preset;
1255 {0,
nullptr, 0,
nullptr,
nullptr},
1258 ot->
name =
"Shutter Curve Preset";
1260 ot->
idname =
"RENDER_OT_shutter_curve_preset";
int ED_draw_imbuf_method(const ImBuf *ibuf)
bScreen * CTX_wm_screen(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
View3D * CTX_wm_view3d(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
ImBuf * BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **r_lock)
Image * BKE_image_ensure_viewer(Main *bmain, int type, const char *name)
void BKE_image_release_ibuf(Image *ima, ImBuf *ibuf, void *lock)
void BKE_image_update_gputexture_delayed(Image *ima, ImageTile *image_tile, ImBuf *ibuf, int x, int y, int w, int h)
void BKE_image_backup_render(Scene *scene, Image *ima, bool free_current_slot)
void BKE_image_signal(Main *bmain, Image *ima, ImageUser *iuser, int signal)
void BKE_image_partial_update_mark_full_update(Image *image)
Mark the whole image to be updated.
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
ListBase * BKE_view_layer_object_bases_get(ViewLayer *view_layer)
void BKE_main_id_tag_listbase(ListBase *lb, int tag, bool value)
void BKE_main_free(Main *bmain)
void BKE_ntree_update_main(Main *bmain, NodeTreeUpdateExtraParams *params)
void BKE_ntree_update_tag_id_changed(Main *bmain, ID *id)
General operations, lookup, etc. for blender objects.
void BKE_object_free_derived_caches(Object *ob)
void BKE_report(ReportList *reports, eReportType type, const char *message)
#define SETLOOPER_SET_ONLY(_sce_basis, _sce_iter, _base)
bool BKE_scene_camera_switch_update(Scene *scene)
int BKE_scene_multiview_view_id_get(const RenderData *rd, const char *viewname)
void BKE_spacedata_draw_locks(bool set)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
int BLI_findstringindex(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
#define SNPRINTF(dst, format,...)
size_t BLI_string_join_array(char *result, size_t result_maxncpy, const char *strings[], uint strings_num) ATTR_NONNULL()
void size_t BLI_string_len_array(const char *strings[], uint strings_num) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
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 BLT_I18NCONTEXT_ID_CURVE_LEGACY
void DEG_tag_on_visible_update(Main *bmain, bool do_time)
#define IMA_MAX_RENDER_TEXT_SIZE
@ BASE_ENABLED_AND_MAYBE_VISIBLE_IN_VIEWPORT
Object is a sort of wrapper for general info.
#define RE_PASSNAME_COMBINED
#define V3D_CAMERA_LOCAL(v3d)
bool ED_operator_screenactive(bContext *C)
int ED_screen_animation_play(bContext *C, int sync, int mode)
bScreen * ED_screen_animation_playing(const wmWindowManager *wm)
void ED_update_for_newframe(Main *bmain, Depsgraph *depsgraph)
bool ED_editors_flush_edits_ex(Main *bmain, bool for_render, bool check_needs_flush)
bool IMB_colormanagement_support_glsl_draw(const ColorManagedViewSettings *view_settings)
void IMB_partial_display_buffer_update(ImBuf *ibuf, const float *linear_buffer, const unsigned char *byte_buffer, int stride, int offset_x, int offset_y, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, int xmin, int ymin, int xmax, int ymax)
Contains defines and structs used throughout the imbuf module.
@ IB_DISPLAY_BUFFER_INVALID
Read Guarded memory(de)allocation.
local_group_size(16, 16) .push_constant(Type b
void SEQ_cache_cleanup(Scene *scene)
RenderEngineType * RE_engines_find(const char *idname)
size_t(* MEM_get_peak_memory)(void)
size_t(* MEM_get_memory_in_use)(void)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
static void error(const char *str)
void ntreeCompositClearTags(bNodeTree *ntree)
static const EnumPropertyItem prop_shape_items[]
ScrArea * render_view_open(bContext *C, int mx, int my, ReportList *reports)
static void render_endjob(void *rjv)
static void render_image_restore_layer(RenderJob *rj)
static void current_scene_update(void *rjv, Scene *scene)
static int render_shutter_curve_preset_exec(bContext *C, wmOperator *op)
static void image_rect_update(void *rjv, RenderResult *rr, rcti *renrect)
static int screen_render_modal(bContext *C, wmOperator *op, const wmEvent *event)
static void image_renderinfo_cb(void *rjv, RenderStats *rs)
void RENDER_OT_render(wmOperatorType *ot)
static void image_buffer_rect_update(RenderJob *rj, RenderResult *rr, ImBuf *ibuf, ImageUser *iuser, const rcti *tile_rect, int offset_x, int offset_y, const char *viewname)
static void make_renderinfo_string(const RenderStats *rs, const Scene *scene, const bool v3d_override, const char *error, char ret[IMA_MAX_RENDER_TEXT_SIZE])
Scene * ED_render_job_get_scene(const bContext *C)
static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void screen_render_single_layer_set(wmOperator *op, Main *mainp, ViewLayer *active_layer, Scene **scene, ViewLayer **single_layer)
static void render_drawlock(void *rjv, bool lock)
void RENDER_OT_shutter_curve_preset(wmOperatorType *ot)
static bool render_break(void *rjv)
static int screen_render_exec(bContext *C, wmOperator *op)
static void clean_viewport_memory(Main *bmain, Scene *scene)
Scene * ED_render_job_get_current_scene(const bContext *C)
static bool render_breakjob(void *rjv)
static void render_image_update_pass_and_layer(RenderJob *rj, RenderResult *rr, ImageUser *iuser)
static void render_progress_update(void *rjv, float progress)
static void clean_viewport_memory_base(Base *base)
static void screen_render_cancel(bContext *C, wmOperator *op)
static void render_freejob(void *rjv)
static bool image_buffer_calc_tile_rect(const RenderResult *rr, const ImBuf *ibuf, rcti *renrect, rcti *r_ibuf_rect, int *r_offset_x, int *r_offset_y)
static void render_startjob(void *rjv, wmJobWorkerStatus *worker_status)
bool RE_HasCombinedLayer(const RenderResult *result)
RenderView * RE_RenderViewGetById(RenderResult *rr, const int view_id)
void RNA_string_get(PointerRNA *ptr, const char *name, char *value)
bool RNA_struct_property_is_set(PointerRNA *ptr, const char *identifier)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
bool RE_HasSingleLayer(Render *re)
void RE_stats_draw_cb(Render *re, void *handle, void(*f)(void *handle, RenderStats *rs))
void RE_progress_cb(Render *re, void *handle, void(*f)(void *handle, float))
void RE_test_break_cb(Render *re, void *handle, bool(*f)(void *handle))
void RE_current_scene_update_cb(Render *re, void *handle, void(*f)(void *handle, Scene *scene))
void RE_InitRenderCB(Render *re)
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)
Render * RE_NewSceneRender(const Scene *scene)
bool RE_seq_render_active(Scene *scene, RenderData *rd)
RenderResult * RE_AcquireResultRead(Render *re)
void RE_ReleaseResult(Render *re)
const char * RE_GetActiveRenderView(Render *re)
void RE_RenderAnim(Render *re, Main *bmain, Scene *scene, ViewLayer *single_layer, Object *camera_override, int sfra, int efra, int tfra)
void RE_system_gpu_context_ensure(Render *re)
bool RE_allow_render_generic_object(Object *ob)
void RE_display_update_cb(Render *re, void *handle, void(*f)(void *handle, RenderResult *rr, rcti *rect))
bool RE_is_rendering_allowed(Scene *scene, ViewLayer *single_layer, Object *camera_override, ReportList *reports)
void RE_draw_lock_cb(Render *re, void *handle, void(*f)(void *handle, bool lock))
void RE_SetReports(Render *re, ReportList *reports)
float * RE_RenderLayerGetPass(RenderLayer *rl, const char *name, const char *viewname)
_W64 unsigned int uintptr_t
bool SEQ_relations_check_scene_recursion(Scene *scene, ReportList *reports)
ImBufFloatBuffer float_buffer
ImBufByteBuffer byte_buffer
void(* render)(struct RenderEngine *engine, struct Depsgraph *depsgraph)
ColorManagedViewSettings view_settings
ColorManagedDisplaySettings display_settings
struct bNodeTree * nodetree
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
void(* cancel)(bContext *C, wmOperator *op)
struct ReportList * reports
void * BKE_image_free_buffers
void * BKE_image_get_tile
void WM_cursor_wait(bool val)
void WM_main_add_notifier(uint type, void *reference)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_set_locked_interface(wmWindowManager *wm, bool lock)
void WM_jobs_timer(wmJob *wm_job, double time_step, uint note, uint endnote)
void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job)
void WM_jobs_kill_type(wmWindowManager *wm, const void *owner, int job_type)
void WM_jobs_delay_start(wmJob *wm_job, double delay_time)
wmJob * WM_jobs_get(wmWindowManager *wm, wmWindow *win, const void *owner, const char *name, const eWM_JobFlag flag, const eWM_JobType job_type)
void WM_jobs_callbacks(wmJob *wm_job, wm_jobs_start_callback startjob, void(*initjob)(void *), void(*update)(void *), void(*endjob)(void *))
void WM_jobs_kill_all_except(wmWindowManager *wm, const void *owner)
bool WM_jobs_test(const wmWindowManager *wm, const void *owner, int job_type)
void WM_jobs_customdata_set(wmJob *wm_job, void *customdata, void(*free)(void *customdata))
void * WM_jobs_customdata_from_type(wmWindowManager *wm, const void *owner, int job_type)
ViewLayer * WM_window_get_active_view_layer(const wmWindow *win)
bScreen * WM_window_get_active_screen(const wmWindow *win)