overshoot profiler zoom interpolation
This commit is contained in:
parent
934aba571b
commit
a33b7346fa
@ -5495,6 +5495,22 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -5517,13 +5533,8 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
|
||||
UI_Key profiler_graph_box = UI_KeyF("graph");
|
||||
UI_SetDF(OmitFlags, UI_BoxFlag_CaptureMouse * !!(frame->is_looking))
|
||||
if (TweakBool("Show profiler", 1))
|
||||
if (profiler->is_showing)
|
||||
{
|
||||
profiler->is_showing = 1;
|
||||
|
||||
|
||||
|
||||
|
||||
// FIXME: Remove this
|
||||
|
||||
|
||||
@ -5600,23 +5611,49 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
|
||||
|
||||
// FIXME: Remove this
|
||||
f32 prof_zoom_rate = 1.5;
|
||||
f32 prof_zoom_rate = 1.65;
|
||||
f64 prof_lerp_rate = SaturateF64(frame->dt * 25);
|
||||
|
||||
|
||||
{
|
||||
f64 zooms = UI_Presses(main_box, Button_WheelDown) - UI_Presses(main_box, Button_WheelUp);
|
||||
f64 zoom_factor = PowF64(prof_zoom_rate, zooms);
|
||||
profiler->target_ns_per_px *= zoom_factor;
|
||||
profiler->target_view_ns = profiler->cursor_ns - (profiler->cursor_ns - profiler->target_view_ns) * zoom_factor;
|
||||
if (zooms != 0)
|
||||
{
|
||||
profiler->last_zoom_delta = profiler->target_ns_per_px - profiler->ns_per_px;
|
||||
profiler->last_view_delta = profiler->target_view_ns - profiler->view_ns;
|
||||
}
|
||||
f64 overshoot_rate = 2 * frame->dt;
|
||||
profiler->ns_per_px = LerpF64(profiler->ns_per_px, profiler->target_ns_per_px + profiler->last_zoom_delta * overshoot_rate, prof_lerp_rate);
|
||||
profiler->view_ns = LerpF64(profiler->view_ns, profiler->target_view_ns + profiler->last_view_delta * overshoot_rate, prof_lerp_rate);
|
||||
|
||||
if (profiler->last_zoom_delta < 0)
|
||||
{
|
||||
profiler->ns_per_px = MaxF64(profiler->ns_per_px, profiler->target_ns_per_px);
|
||||
}
|
||||
else if (profiler->last_zoom_delta > 0)
|
||||
{
|
||||
profiler->ns_per_px = MinF64(profiler->ns_per_px, profiler->target_ns_per_px);
|
||||
}
|
||||
|
||||
if (profiler->last_view_delta < 0)
|
||||
{
|
||||
profiler->view_ns = MaxF64(profiler->view_ns, profiler->target_view_ns);
|
||||
}
|
||||
else if (profiler->last_view_delta > 0)
|
||||
{
|
||||
profiler->view_ns = MinF64(profiler->view_ns, profiler->target_view_ns);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
f64 zoom_factor = PowF64(prof_zoom_rate, UI_Presses(main_box, Button_WheelDown) - UI_Presses(main_box, Button_WheelUp));
|
||||
|
||||
profiler->target_ns_per_px *= zoom_factor;
|
||||
profiler->target_ns_per_px = ClampF64(profiler->target_ns_per_px, min_profiler_ns_per_px, max_profiler_ns_per_px);
|
||||
|
||||
|
||||
// profiler->view_ns = profiler->cursor_ns - (profiler->cursor_ns - profiler->view_ns) * zoom_factor;
|
||||
// TODO: Don't apply offset when zoom movement was clamped
|
||||
profiler->target_view_ns = profiler->cursor_ns - (profiler->cursor_ns - profiler->target_view_ns) * zoom_factor;
|
||||
|
||||
profiler->ns_per_px = LerpF64(profiler->ns_per_px, profiler->target_ns_per_px, prof_lerp_rate);
|
||||
profiler->view_ns = LerpF64(profiler->view_ns, profiler->target_view_ns, prof_lerp_rate);
|
||||
|
||||
|
||||
|
||||
@ -5736,7 +5773,6 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
i64 start_ns;
|
||||
i64 end_ns;
|
||||
|
||||
b32 is_collapsed;
|
||||
u64 collapsed_count;
|
||||
};
|
||||
|
||||
@ -5784,8 +5820,8 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
SllQueuePush(first_bfs_zone, last_bfs_zone, root_bfs);
|
||||
}
|
||||
|
||||
VisZone *collapsed_vis_zone = 0;
|
||||
V_Zone *collapsed_zone_parent = 0;
|
||||
VisZone *prev_vis_zone = 0;
|
||||
V_Zone *prev_zone_parent = 0;
|
||||
for (BfsZone *bfs_zone = first_bfs_zone; bfs_zone; bfs_zone = first_bfs_zone)
|
||||
{
|
||||
SllQueuePop(first_bfs_zone, last_bfs_zone);
|
||||
@ -5796,8 +5832,30 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
i64 zone_elapsed_ns = zone_end_ns - zone_start_ns;
|
||||
i64 visual_zone_start_ns = MaxI64(zone_start_ns, profiler->view_ns);
|
||||
i64 visual_zone_end_ns = MinI64(zone_end_ns, profiler->view_ns + view_range_len_ns);
|
||||
|
||||
f64 visual_zone_start_px = visual_zone_start_ns / profiler->ns_per_px;
|
||||
f64 visual_zone_end_px = MaxF64(visual_zone_end_ns / profiler->ns_per_px, visual_zone_start_px + min_zone_width_px);
|
||||
if (prev_vis_zone && prev_zone_parent == zone->parent)
|
||||
// if (prev_vis_zone)
|
||||
{
|
||||
// visual_zone_start_px = MaxF64(visual_zone_start_px, prev_vis_zone->end_px + 1);
|
||||
|
||||
// f64 px = prev_vis_zone->end_px;
|
||||
// prev_vis_zone->end_px = CeilF64(px);
|
||||
// visual_zone_start_px = MaxF64(visual_zone_start_px, CeilF64(prev_vis_zone->end_px));
|
||||
|
||||
f64 px = prev_vis_zone->end_px;
|
||||
prev_vis_zone->end_px = FloorF64(px);
|
||||
visual_zone_start_px = CeilF64(px);
|
||||
}
|
||||
|
||||
// f64 visual_zone_end_px = MaxF64(visual_zone_end_ns / profiler->ns_per_px, visual_zone_start_px + min_zone_width_px);
|
||||
f64 visual_zone_end_px = visual_zone_end_ns / profiler->ns_per_px;
|
||||
// f64 visual_zone_end_px = visual_zone_end_ns / profiler->ns_per_px - 1;
|
||||
|
||||
|
||||
// visual_zone_start_px = FloorF64(visual_zone_start_px);
|
||||
// visual_zone_end_px = CeilF64(visual_zone_end_px);
|
||||
|
||||
|
||||
b32 is_root_zone = zone == zone_track->root_zone;
|
||||
b32 should_collapse_zone = (zone_elapsed_ns / profiler->ns_per_px) <= zone_collapse_threshold_px && !is_root_zone;
|
||||
@ -5854,12 +5912,13 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
VisZone *vis_zone = 0;
|
||||
if (
|
||||
should_collapse_zone &&
|
||||
collapsed_vis_zone &&
|
||||
collapsed_zone_parent == zone->parent &&
|
||||
((zone_start_ns - collapsed_vis_zone->end_ns) / profiler->ns_per_px) < zone_collapse_threshold_px
|
||||
prev_vis_zone &&
|
||||
prev_vis_zone->collapsed_count > 0 &&
|
||||
prev_zone_parent == zone->parent &&
|
||||
((zone_start_ns - prev_vis_zone->end_ns) / profiler->ns_per_px) < zone_collapse_threshold_px
|
||||
)
|
||||
{
|
||||
vis_zone = collapsed_vis_zone;
|
||||
vis_zone = prev_vis_zone;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -5879,11 +5938,11 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
|
||||
if (should_collapse_zone)
|
||||
{
|
||||
vis_zone->is_collapsed = 1;
|
||||
vis_zone->collapsed_count += zone->total_descendents_count + 1;
|
||||
collapsed_vis_zone = vis_zone;
|
||||
collapsed_zone_parent = zone->parent;
|
||||
}
|
||||
|
||||
prev_vis_zone = vis_zone;
|
||||
prev_zone_parent = zone->parent;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -6061,10 +6120,10 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
{
|
||||
zone_text = StringF(frame->arena, "%F", FmtUint(zone->collapsed_count));
|
||||
zone_text_color = collapsed_text_color;
|
||||
zone_color = VEC4(0, 0, 0, 0);
|
||||
// zone_color = VEC4(0, 0, 0, 0);
|
||||
// zone_color = VEC4(1, 0, 1, 1);
|
||||
// zone_color = VEC4(0.15, 0.15, 0.15, 0.5);
|
||||
// zone_color = VEC4(0.20, 0.20, 0.20, 0.5);
|
||||
zone_color = VEC4(0.20, 0.20, 0.20, 0.5);
|
||||
zone_color_bd = VEC4(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
@ -6109,7 +6168,7 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
}
|
||||
|
||||
// Zone name
|
||||
if (zone_len_px > zone_collapse_threshold_px)
|
||||
if (zone_len_px > zone_collapse_threshold_px * 3)
|
||||
{
|
||||
if (is_collapsed)
|
||||
{
|
||||
@ -6375,12 +6434,6 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -7215,6 +7268,11 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
frame->show_console = !frame->show_console;
|
||||
} break;
|
||||
|
||||
case V_CmdKind_toggle_profiler:
|
||||
{
|
||||
frame->profiler.is_showing = !frame->profiler.is_showing;
|
||||
} break;
|
||||
|
||||
case V_CmdKind_toggle_timeline:
|
||||
{
|
||||
frame->timeline.show = !frame->timeline.show;
|
||||
@ -7342,6 +7400,10 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//////////////////////////////
|
||||
//- Begin gpu frame
|
||||
|
||||
|
||||
@ -11,7 +11,8 @@
|
||||
X(save_level, Save level, V_CmdDescFlag_None, V_HOTKEY( Button_S, .ctrl = 1 ), ) \
|
||||
X(toggle_ui_debug, Toggle UI Debug, V_CmdDescFlag_None, V_HOTKEY( Button_F5 ), ) \
|
||||
X(toggle_console, Toggle Developer Console, V_CmdDescFlag_None, V_HOTKEY( Button_GraveAccent ), ) \
|
||||
X(toggle_timeline, Toggle Debug Timeline, V_CmdDescFlag_None, V_HOTKEY( Button_GraveAccent, .alt = 1 ), ) \
|
||||
X(toggle_timeline, Toggle Debug Timeline, V_CmdDescFlag_None, V_HOTKEY( Button_GraveAccent, .alt = 1, .ctrl = 1 ), ) \
|
||||
X(toggle_profiler, Toggle Profiler, V_CmdDescFlag_None, V_HOTKEY( Button_GraveAccent, .alt = 1 ), ) \
|
||||
X(pause_timeline, Pause Debug Timeline, V_CmdDescFlag_HideFromPalette, V_HOTKEY( Button_E ), ) \
|
||||
X(lock_timeline, Lock Debug Timeline, V_CmdDescFlag_HideFromPalette, V_HOTKEY( Button_R ), ) \
|
||||
X(toggle_fullscreen, Toggle Fullscreen Mode, V_CmdDescFlag_None, V_HOTKEY( Button_Enter, .alt = 1 ) ) \
|
||||
@ -307,9 +308,15 @@ Struct(V_Profiler)
|
||||
f64 ruler_start_ns;
|
||||
f32 ruler_opacity;
|
||||
|
||||
f64 last_zoom_delta;
|
||||
f64 last_view_delta;
|
||||
|
||||
f64 target_ns_per_px;
|
||||
f64 ns_per_px;
|
||||
|
||||
f64 zoom_level;
|
||||
f64 target_zoom_level;
|
||||
|
||||
f64 cursor_ns;
|
||||
f64 drag_cursor_px;
|
||||
};
|
||||
|
||||
@ -835,7 +835,7 @@ UI_Frame *UI_BeginFrame(UI_FrameFlag frame_flags)
|
||||
|
||||
feedback->active_smooth = SaturateF32(LerpF32(feedback->active_smooth, target_active, active_blend_rate));
|
||||
feedback->hot_smooth = SaturateF32(LerpF32(feedback->hot_smooth, target_hot, hot_blend_rate));
|
||||
feedback->hovered_smooth = SaturateF32(LerpF32(feedback->hovered_smooth, target_hovered, hovered_blend_rate));
|
||||
feedback->hovered_smooth = SaturateF32(LerpF32(feedback->hovered_smooth, target_hovered, hovered_blend_rate));
|
||||
feedback->exists_smooth = SaturateF32(LerpF32(feedback->exists_smooth, target_exists, exists_blend_rate));
|
||||
feedback->misc_smooth = SaturateF32(LerpF32(feedback->misc_smooth, target_misc, misc_blend_rate));
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user