110 int tile_y, tile_height, tile_x, tile_width;
121 tile_x = renrect->
xmin;
122 tile_width = renrect->
xmax - tile_x;
123 if (tile_width < 2) {
127 tile_y = renrect->
ymin;
128 tile_height = renrect->
ymax - tile_y;
129 if (tile_height < 2) {
136 tile_width = rr->
rectx;
137 tile_height = rr->
recty;
142 if (offset_x >= ibuf->
x) {
146 if (offset_y >= ibuf->
y) {
150 if (offset_x + tile_width > ibuf->
x) {
151 tile_width = ibuf->
x - offset_x;
153 if (offset_y + tile_height > ibuf->
y) {
154 tile_height = ibuf->
y - offset_y;
157 if (tile_width < 1 || tile_height < 1) {
161 r_ibuf_rect->
xmax = tile_x + tile_width;
162 r_ibuf_rect->
ymax = tile_y + tile_height;
163 r_ibuf_rect->
xmin = tile_x;
164 r_ibuf_rect->
ymin = tile_y;
165 *r_offset_x = offset_x;
166 *r_offset_y = offset_y;
174 const rcti *tile_rect,
177 const char *viewname)
180 const float *rectf =
nullptr;
181 int linear_stride, linear_offset_x, linear_offset_y;
221 if (rr->
renlay ==
nullptr) {
226 if (rectf ==
nullptr) {
230 rectf += 4 * (rr->
rectx * tile_rect->
ymin + tile_rect->
xmin);
231 linear_stride = rr->
rectx;
232 linear_offset_x = offset_x;
233 linear_offset_y = offset_y;
237 linear_stride = ibuf->
x;
277 scn->
r.
cfra = (*scene)->r.cfra;
295 else if (((*scene)->r.scemode &
R_SINGLE_LAYER) && active_layer) {
296 *single_layer = active_layer;
316 if (re_type->
render ==
nullptr) {
325 op->
reports,
RPT_ERROR,
"Cannot write a single file with an animation format selected");
390 const bool v3d_override,
394 char info_time_str[32];
396 float megs_used_memory, megs_peak_memory;
402 megs_used_memory = (
mem_in_use) / (1024.0 * 1024.0);
403 megs_peak_memory = (peak_memory) / (1024.0 * 1024.0);
407 spos += sprintf(spos,
"%s | ",
TIP_(
"3D Local View"));
409 else if (v3d_override) {
410 spos += sprintf(spos,
"%s | ",
TIP_(
"3D View"));
421 spos += sprintf(spos,
TIP_(
"| Last:%s "), info_time_str);
424 spos += sprintf(spos,
"| ");
431 spos += sprintf(spos,
"| ");
434 spos += sprintf(spos,
TIP_(
"Time:%s "), info_time_str);
439 spos += sprintf(spos,
"| %s ", rs->
statstr);
444 spos += sprintf(spos,
TIP_(
"| Mem:%.2fM (Peak %.2fM) "), megs_used_memory, megs_peak_memory);
453 spos += sprintf(spos,
"| %s ", rs->
infostr);
456 spos += sprintf(spos,
"| %s ",
error);
462 printf(
"WARNING! renderwin text beyond limit\n");
476 if (rr->
text ==
nullptr) {
509 ScrArea *first_area =
nullptr, *matched_area =
nullptr;
523 if (sima !=
nullptr && sima->
image == rj->
image) {
524 if (first_area ==
nullptr) {
537 if (matched_area ==
nullptr) {
538 matched_area = first_area;
639 static void render_startjob(
void *rjv,
short *stop,
short *do_update,
float *progress)
749 G.is_rendering =
false;
841 switch (event->
type) {
922 if (re_type->
render ==
nullptr) {
940 op->
reports,
RPT_ERROR,
"Cannot write a single file with an animation format selected");
978 rj = MEM_cnew<RenderJob>(
"render job");
989 rj->
anim = is_animation;
1007 if (camera_override && camera_override !=
scene->
camera) {
1032 name =
"Sequence Render";
1084 G.is_rendering =
true;
1116 "Render files from the animation range of this scene");
1123 "Save rendered the image to the output path (used only when animation is disabled)");
1128 "When inside a 3D viewport, use layers and camera of the viewport");
1135 "Single render layer to re-render (used only when animation is disabled)");
1142 "Scene to render, current scene if not specified");
1180 mblur_shutter_curve->
preset = preset;
1198 {0,
nullptr, 0,
nullptr,
nullptr},
1201 ot->
name =
"Shutter Curve Preset";
1203 ot->
idname =
"RENDER_OT_shutter_curve_preset";
int ED_draw_imbuf_method(struct ImBuf *ibuf)
struct Scene * CTX_data_scene(const bContext *C)
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct ViewLayer * CTX_data_view_layer(const bContext *C)
struct View3D * CTX_wm_view3d(const bContext *C)
struct bScreen * CTX_wm_screen(const bContext *C)
struct Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
struct Main * CTX_data_main(const bContext *C)
struct wmWindow * CTX_wm_window(const bContext *C)
void BKE_image_release_ibuf(struct Image *ima, struct ImBuf *ibuf, void *lock)
struct ImBuf * BKE_image_acquire_ibuf(struct Image *ima, struct ImageUser *iuser, void **r_lock)
void BKE_image_backup_render(struct Scene *scene, struct Image *ima, bool free_current_slot)
void BKE_image_partial_update_mark_full_update(struct Image *image)
Mark the whole image to be updated.
struct Image * BKE_image_ensure_viewer(struct Main *bmain, int type, const char *name)
void BKE_image_signal(struct Main *bmain, struct Image *ima, struct ImageUser *iuser, int signal)
void BKE_image_update_gputexture_delayed(struct Image *ima, struct ImageTile *image_tile, struct ImBuf *ibuf, int x, int y, int w, int h)
void BKE_main_id_tag_listbase(struct ListBase *lb, int tag, bool value)
void BKE_main_free(struct Main *mainvar)
void BKE_ntree_update_tag_id_changed(struct Main *bmain, struct ID *id)
void BKE_ntree_update_main(struct Main *bmain, struct NodeTreeUpdateExtraParams *params)
General operations, lookup, etc. for blender objects.
void BKE_object_free_derived_caches(struct 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(struct Scene *scene)
int BKE_scene_multiview_view_id_get(const struct RenderData *rd, const char *viewname)
void BKE_spacedata_draw_locks(bool set)
#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)
void * BLI_findstring(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)
size_t BLI_timecode_string_from_time_simple(char *str, size_t maxncpy, double time_seconds) ATTR_NONNULL()
#define BLT_I18NCONTEXT_ID_CURVE_LEGACY
struct Depsgraph Depsgraph
void DEG_tag_on_visible_update(struct Main *bmain, bool do_time)
@ CUMA_EXTEND_EXTRAPOLATE
#define IMA_MAX_RENDER_TEXT
Object is a sort of wrapper for general info.
#define RE_PASSNAME_COMBINED
#define V3D_CAMERA_LOCAL(v3d)
#define R_NO_FRAME_UPDATE
bool ED_operator_screenactive(struct bContext *C)
int ED_screen_animation_play(struct bContext *C, int sync, int mode)
void ED_update_for_newframe(struct Main *bmain, struct Depsgraph *depsgraph)
bScreen * ED_screen_animation_playing(const struct wmWindowManager *wm)
bool ED_editors_flush_edits_ex(struct Main *bmain, bool for_render, bool check_needs_flush)
bool IMB_colormanagement_support_glsl_draw(const struct ColorManagedViewSettings *view_settings)
void IMB_partial_display_buffer_update(struct ImBuf *ibuf, const float *linear_buffer, const unsigned char *byte_buffer, int stride, int offset_x, int offset_y, const struct ColorManagedViewSettings *view_settings, const struct 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.
Platform independent time functions.
RenderEngineType * RE_engines_find(const char *idname)
void SEQ_cache_cleanup(Scene *scene)
void * BKE_image_free_buffers
void * BKE_image_get_tile
size_t(* MEM_get_peak_memory)(void)
void(* MEM_freeN)(void *vmemh)
size_t(* MEM_get_memory_in_use)(void)
void *(* MEM_callocN)(size_t len, const char *str)
static void error(const char *str)
static void area(int d1, int d2, int e1, int e2, float weights[2])
void ntreeCompositClearTags(bNodeTree *ntree)
bool RE_HasSingleLayer(Render *re)
void RE_stats_draw_cb(Render *re, void *handle, void(*f)(void *handle, RenderStats *rs))
RenderResult * RE_AcquireResultRead(Render *re)
void RE_progress_cb(Render *re, void *handle, void(*f)(void *handle, float))
int RE_seq_render_active(Scene *scene, RenderData *rd)
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)
void RE_ReleaseResult(Render *re)
float * RE_RenderLayerGetPass(RenderLayer *rl, const char *name, const char *viewname)
void RE_RenderAnim(Render *re, Main *bmain, Scene *scene, ViewLayer *single_layer, Object *camera_override, int sfra, int efra, int tfra)
const char * RE_GetActiveRenderView(Render *re)
bool RE_allow_render_generic_object(Object *ob)
void RE_gl_context_create(Render *re)
void RE_display_update_cb(Render *re, void *handle, void(*f)(void *handle, RenderResult *rr, rcti *rect))
void RE_test_break_cb(Render *re, void *handle, int(*f)(void *handle))
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)
struct ScrArea * render_view_open(struct bContext *C, int mx, int my, struct 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)
Scene * ED_render_job_get_scene(const bContext *C)
static int render_break(void *rjv)
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 int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int render_breakjob(void *rjv)
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)
static void make_renderinfo_string(const RenderStats *rs, const Scene *scene, const bool v3d_override, const char *error, char *str)
void RENDER_OT_shutter_curve_preset(wmOperatorType *ot)
static int screen_render_exec(bContext *C, wmOperator *op)
static void clean_viewport_memory(Main *bmain, Scene *scene)
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_startjob(void *rjv, short *stop, short *do_update, float *progress)
static void render_freejob(void *rjv)
Scene * ED_render_job_get_current_scene(const bContext *C)
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)
RenderView * RE_RenderViewGetById(RenderResult *rr, const int view_id)
bool RE_HasCombinedLayer(const RenderResult *rr)
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_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, int maxlen, 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)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, int default_value, const char *ui_name, const char *ui_description)
_W64 unsigned int uintptr_t
bool SEQ_relations_check_scene_recursion(Scene *scene, ReportList *reports)
struct CurveMapping mblur_shutter_curve
struct ImageFormatData im_format
void(* render)(struct RenderEngine *engine, struct Depsgraph *depsgraph)
ColorManagedViewSettings view_settings
struct Object * camera_override
ColorManagedDisplaySettings display_settings
struct bNodeTree * nodetree
ColorManagedViewSettings view_settings
ColorManagedDisplaySettings display_settings
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
int(* modal)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
void(* cancel)(struct bContext *, struct wmOperator *)
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
double PIL_check_seconds_timer(void)
void WM_cursor_wait(bool val)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
void WM_main_add_notifier(unsigned int type, void *reference)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_set_locked_interface(wmWindowManager *wm, bool lock)
void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job)
void * WM_jobs_customdata_from_type(wmWindowManager *wm, const void *owner, int job_type)
void WM_jobs_kill_type(struct wmWindowManager *wm, const void *owner, int job_type)
void WM_jobs_delay_start(wmJob *wm_job, double delay_time)
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 *))
void WM_jobs_timer(wmJob *wm_job, double timestep, unsigned int note, unsigned int endnote)
wmJob * WM_jobs_get(wmWindowManager *wm, wmWindow *win, const void *owner, const char *name, int flag, int job_type)
bScreen * WM_window_get_active_screen(const wmWindow *win)
ViewLayer * WM_window_get_active_view_layer(const wmWindow *win)