diff options
Diffstat (limited to 'source/blender/editors/render/render_internal.c')
-rw-r--r-- | source/blender/editors/render/render_internal.c | 66 |
1 files changed, 58 insertions, 8 deletions
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index 10de2d667ea..eb8ea01f750 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -192,7 +192,7 @@ static void image_buffer_rect_update(RenderJob *rj, RenderResult *rr, ImBuf *ibu /* TODO(sergey): Need to check has_combined here? */ if (iuser->pass == 0) { RenderView *rv; - size_t view_id = BKE_scene_multiview_view_id_get(&scene->r, viewname); + const int view_id = BKE_scene_multiview_view_id_get(&scene->r, viewname); rv = RE_RenderViewGetById(rr, view_id); /* find current float rect for display, first case is after composite... still weak */ @@ -311,7 +311,7 @@ static int screen_render_exec(bContext *C, wmOperator *op) ima = BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result"); BKE_image_signal(ima, NULL, IMA_SIGNAL_FREE); - BKE_image_backup_render(scene, ima); + BKE_image_backup_render(scene, ima, true); /* cleanup sequencer caches before starting user triggered render. * otherwise, invalidated cache entries can make their way into @@ -786,7 +786,7 @@ static void clean_viewport_memory(Main *bmain, Scene *scene, int renderlay) Base *base; for (object = bmain->object.first; object; object = object->id.next) { - object->id.flag |= LIB_DOIT; + object->id.tag |= LIB_TAG_DOIT; } for (SETLOOPER(scene, sce_iter, base)) { @@ -794,16 +794,16 @@ static void clean_viewport_memory(Main *bmain, Scene *scene, int renderlay) continue; } if (RE_allow_render_generic_object(base->object)) { - base->object->id.flag &= ~LIB_DOIT; + base->object->id.tag &= ~LIB_TAG_DOIT; } } for (SETLOOPER(scene, sce_iter, base)) { object = base->object; - if ((object->id.flag & LIB_DOIT) == 0) { + if ((object->id.tag & LIB_TAG_DOIT) == 0) { continue; } - object->id.flag &= ~LIB_DOIT; + object->id.tag &= ~LIB_TAG_DOIT; BKE_object_free_derived_caches(object); } @@ -877,7 +877,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even // store spare /* ensure at least 1 area shows result */ - sa = render_view_open(C, event->x, event->y); + sa = render_view_open(C, event->x, event->y, op->reports); jobflag = WM_JOB_EXCL_RENDER | WM_JOB_PRIORITY | WM_JOB_PROGRESS; @@ -956,7 +956,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even /* get a render result image, and make sure it is empty */ ima = BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result"); BKE_image_signal(ima, NULL, IMA_SIGNAL_FREE); - BKE_image_backup_render(rj->scene, ima); + BKE_image_backup_render(rj->scene, ima, true); rj->image = ima; /* setup new render */ @@ -1188,6 +1188,7 @@ static void render_view3d_startjob(void *customdata, short *stop, short *do_upda char name[32]; int update_flag; bool use_border; + int ob_inst_update_flag = 0; update_flag = rp->engine->job_update_flag; rp->engine->job_update_flag = 0; @@ -1299,6 +1300,13 @@ static void render_view3d_startjob(void *customdata, short *stop, short *do_upda /* OK, can we enter render code? */ if (rstats->convertdone) { bool first_time = true; + + if (update_flag & PR_UPDATE_VIEW) { + ob_inst_update_flag |= RE_OBJECT_INSTANCES_UPDATE_VIEW; + } + + RE_updateRenderInstances(re, ob_inst_update_flag); + for (;;) { if (first_time == false) { if (restore) @@ -1640,3 +1648,45 @@ Scene *ED_render_job_get_current_scene(const bContext *C) } return NULL; } + +/* Motion blur curve preset */ + +static int render_shutter_curve_preset_exec(bContext *C, wmOperator *op) +{ + Scene *scene = CTX_data_scene(C); + CurveMapping *mblur_shutter_curve = &scene->r.mblur_shutter_curve; + CurveMap *cm = mblur_shutter_curve->cm; + int preset = RNA_enum_get(op->ptr, "shape"); + + cm->flag &= ~CUMA_EXTEND_EXTRAPOLATE; + mblur_shutter_curve->preset = preset; + curvemap_reset(cm, + &mblur_shutter_curve->clipr, + mblur_shutter_curve->preset, + CURVEMAP_SLOPE_POS_NEG); + curvemapping_changed(mblur_shutter_curve, false); + + return OPERATOR_FINISHED; +} + +void RENDER_OT_shutter_curve_preset(wmOperatorType *ot) +{ + PropertyRNA *prop; + static EnumPropertyItem prop_shape_items[] = { + {CURVE_PRESET_SHARP, "SHARP", 0, "Sharp", ""}, + {CURVE_PRESET_SMOOTH, "SMOOTH", 0, "Smooth", ""}, + {CURVE_PRESET_MAX, "MAX", 0, "Max", ""}, + {CURVE_PRESET_LINE, "LINE", 0, "Line", ""}, + {CURVE_PRESET_ROUND, "ROUND", 0, "Round", ""}, + {CURVE_PRESET_ROOT, "ROOT", 0, "Root", ""}, + {0, NULL, 0, NULL, NULL}}; + + ot->name = "Shutter Curve Preset"; + ot->description = "Set shutter curve"; + ot->idname = "RENDER_OT_shutter_curve_preset"; + + ot->exec = render_shutter_curve_preset_exec; + + prop = RNA_def_enum(ot->srna, "shape", prop_shape_items, CURVE_PRESET_SMOOTH, "Mode", ""); + RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_CURVE); /* Abusing id_curve :/ */ +} |