diff --git a/source/blender/draw/engines/eevee_next/eevee_velocity.cc b/source/blender/draw/engines/eevee_next/eevee_velocity.cc index 87407fb887294192f958691b6819204e5327d826..ea688fa96d8d1147396054aadfb869b02a0c7707 100644 --- a/source/blender/draw/engines/eevee_next/eevee_velocity.cc +++ b/source/blender/draw/engines/eevee_next/eevee_velocity.cc @@ -164,7 +164,8 @@ bool VelocityModule::step_object_sync(Object *ob, object_steps[STEP_PREVIOUS]->get_or_resize( vel.obj.ofs[STEP_PREVIOUS]) = ob->object_to_world(); } - if (vel.obj.ofs[STEP_NEXT] == -1) { + /* STEP_NEXT is not used in viewport. */ + if (vel.obj.ofs[STEP_NEXT] == -1 && !inst_.is_viewport()) { vel.obj.ofs[STEP_NEXT] = object_steps_usage[STEP_NEXT]++; object_steps[STEP_NEXT]->get_or_resize(vel.obj.ofs[STEP_NEXT]) = ob->object_to_world(); } @@ -213,11 +214,11 @@ bool VelocityModule::step_object_sync(Object *ob, if (step_ == STEP_CURRENT && has_motion == true && has_deform == false) { const float4x4 &obmat_curr = (*object_steps[STEP_CURRENT])[vel.obj.ofs[STEP_CURRENT]]; const float4x4 &obmat_prev = (*object_steps[STEP_PREVIOUS])[vel.obj.ofs[STEP_PREVIOUS]]; - const float4x4 &obmat_next = (*object_steps[STEP_NEXT])[vel.obj.ofs[STEP_NEXT]]; if (inst_.is_viewport()) { has_motion = (obmat_curr != obmat_prev); } else { + const float4x4 &obmat_next = (*object_steps[STEP_NEXT])[vel.obj.ofs[STEP_NEXT]]; has_motion = (obmat_curr != obmat_prev || obmat_curr != obmat_next); } } @@ -314,6 +315,7 @@ void VelocityModule::step_swap() std::swap(geometry_steps[step_a], geometry_steps[step_b]); std::swap(camera_steps[step_a], camera_steps[step_b]); std::swap(step_time[step_a], step_time[step_b]); + std::swap(object_steps_usage[step_a], object_steps_usage[step_b]); for (VelocityObjectData &vel : velocity_map.values()) { vel.obj.ofs[step_a] = vel.obj.ofs[step_b]; @@ -344,6 +346,9 @@ void VelocityModule::begin_sync() step_ = STEP_CURRENT; step_camera_sync(); object_steps_usage[step_] = 0; + + /* STEP_NEXT is not used for viewport. (See #131134) */ + BLI_assert(!inst_.is_viewport() || object_steps_usage[STEP_NEXT] == 0); } /* This is the end of the current frame sync. Not the step_sync. */