Finished fixing input back to prev-sokol feature parity

This commit is contained in:
2024-06-19 18:09:11 -04:00
parent 6f4a5e215c
commit 5d6f996d3c
11 changed files with 155 additions and 94 deletions

View File

@ -112,13 +112,13 @@ startup :: proc( prof : ^SpallProfiler, persistent_mem, frame_mem, transient_mem
using input_events
error : AllocatorError
events, error = make( Queue(InputEvent), 4 * Kilo, persistent_slab_allocator() )
events, error = make( Queue(InputEvent), 4 * Kilo, persistent_allocator(), fixed_cap = true )
ensure(error == AllocatorError.None, "Failed to allocate input.events array")
key_events, error = make( Queue(InputKeyEvent), Kilo, persistent_slab_allocator() )
key_events, error = make( Queue(InputKeyEvent), Kilo, persistent_allocator(), fixed_cap = true )
ensure(error == AllocatorError.None, "Failed to allocate key_events array")
mouse_events, error = make( Queue(InputMouseEvent), 2 * Kilo, persistent_slab_allocator() )
mouse_events, error = make( Queue(InputMouseEvent), 2 * Kilo, persistent_allocator(), fixed_cap = true )
ensure(error == AllocatorError.None, "Failed to allocate mouse_events array")
codes_pressed, error = make( Array(rune), Kilo, persistent_slab_allocator() )
@ -132,8 +132,8 @@ startup :: proc( prof : ^SpallProfiler, persistent_mem, frame_mem, transient_mem
// TODO(Ed): Make this actually load from an ini
{
using config
resolution_width = 1600
resolution_height = 900
resolution_width = 1000
resolution_height = 600
refresh_rate = 0
cam_min_zoom = 0.10
@ -418,10 +418,10 @@ hot_reload :: proc( prof : ^SpallProfiler, persistent_mem, frame_mem, transient_
// input_reload()
{
using input_events
reload( & events, persistent_slab_allocator())
reload( & key_events, persistent_slab_allocator())
reload( & mouse_events, persistent_slab_allocator())
codes_pressed.backing = persistent_slab_allocator()
reload( & events, runtime.nil_allocator())
reload( & key_events, runtime.nil_allocator())
reload( & mouse_events, runtime.nil_allocator())
codes_pressed.backing = persistent_slab_allocator()
staged_input_events.backing = persistent_slab_allocator()
}

View File

@ -119,55 +119,74 @@ sokol_app_event_callback :: proc "c" (sokol_event : ^sokol_app.Event)
logf("%v", sokol_event)
case .KEY_DOWN:
if sokol_event.key_repeat do return
type = .Key_Pressed
key = to_key_from_sokol( sokol_event.key_code )
modifiers = to_modifiers_code_from_sokol( sokol_event.modifiers )
sokol_app.consume_event()
append_staged_input_events( event )
// logf("Key pressed(sokol): %v", key)
// logf("frame (sokol): %v", frame_id )
case .KEY_UP:
if sokol_event.key_repeat do return
type = .Key_Released
key = to_key_from_sokol( sokol_event.key_code )
modifiers = to_modifiers_code_from_sokol( sokol_event.modifiers )
sokol_app.consume_event()
append_staged_input_events( event )
// logf("Key released(sokol): %v", key)
// logf("frame (sokol): %v", frame_id )
case .CHAR:
if sokol_event.key_repeat do return
type = .Unicode
codepoint = transmute(rune) sokol_event.char_code
modifiers = to_modifiers_code_from_sokol( sokol_event.modifiers )
sokol_app.consume_event()
append_staged_input_events( event )
case .MOUSE_DOWN:
type = .Mouse_Pressed
mouse.btn = to_mouse_btn_from_sokol( sokol_event.mouse_button )
modifiers = to_modifiers_code_from_sokol( sokol_event.modifiers )
sokol_app.consume_event()
append_staged_input_events( event )
case .MOUSE_UP:
type = .Mouse_Released
mouse.btn = to_mouse_btn_from_sokol( sokol_event.mouse_button )
modifiers = to_modifiers_code_from_sokol( sokol_event.modifiers )
sokol_app.consume_event()
append_staged_input_events( event )
case .MOUSE_SCROLL:
type = .Mouse_Scroll
mouse.scroll = { sokol_event.scroll_x, sokol_event.scroll_y }
modifiers = to_modifiers_code_from_sokol( sokol_event.modifiers )
sokol_app.consume_event()
append_staged_input_events( event )
case .MOUSE_MOVE:
type = .Mouse_Move
modifiers = to_modifiers_code_from_sokol( sokol_event.modifiers )
sokol_app.consume_event()
append_staged_input_events( event )
case .MOUSE_ENTER:
type = .Mouse_Enter
modifiers = to_modifiers_code_from_sokol( sokol_event.modifiers )
sokol_app.consume_event()
append_staged_input_events( event )
case .MOUSE_LEAVE:
type = .Mouse_Leave
modifiers = to_modifiers_code_from_sokol( sokol_event.modifiers )
sokol_app.consume_event()
append_staged_input_events( event )
// TODO(Ed): Add support
case .TOUCHES_BEGAN:
@ -211,8 +230,6 @@ sokol_app_event_callback :: proc "c" (sokol_event : ^sokol_app.Event)
monitor_refresh_hz := sokol_app.refresh_rate()
sokol_app.consume_event()
}
append_staged_input_events( event )
}
#endregion("Sokol App")

View File

@ -113,7 +113,7 @@ render_mode_screenspace :: proc()
screen_corners := screen_get_corners()
position := screen_corners.top_right
position.x -= app_window.extent.x
position.x -= app_window.extent.x * 0.5
position.y -= debug.draw_debug_text_y
content := str_fmt_buffer( draw_text_scratch[:], format, ..args )
@ -122,37 +122,36 @@ render_mode_screenspace :: proc()
debug.draw_debug_text_y += 14
}
// "Draw text" using immediate mode api
{
font_provider := & state.font_provider_data
using font_provider
@static index : i32
text_test_str := str_fmt("frametime : %0.6f\nframetime(sokol): %0.2f\nframe id : %d\nsokol_frame: %d", frametime_delta_ms, sokol_app.frame_delta() * S_To_MS, frame, sokol_app.frame_count() )
// log(text_test_str)
// text_test_str := str_fmt("HELLO VE FONT CACHE!")
// text_test_str := str_fmt("C")
// font_provider := & state.font_provider_data
// fdef := hmap_chained_get( font_cache, default_font.key )
width := app_window.extent.x * 2
height := app_window.extent.y * 2
ve.set_colour( & ve_font_cache, { 1.0, 1.0, 1.0, 1.0 } )
ve.configure_snap( & ve_font_cache, u32(state.app_window.extent.x * 2.0), u32(state.app_window.extent.y * 2.0) )
ve.draw_text( & ve_font_cache, font_provider_resolve_draw_id(default_font), text_test_str, {0.0, 0.975}, Vec2{1 / width, 1 / height} )
}
debug.debug_text_vis = true
if debug.debug_text_vis
{
fps_msg := str_fmt( "FPS: %f", fps_avg)
fps_msg_width := cast(f32) u32(measure_text_size( fps_msg, default_font, 12.0, 0.0 ).x) + 0.5
fps_msg := str_fmt( "FPS: %0.2f", fps_avg)
fps_msg_width := measure_text_size( fps_msg, default_font, 12.0, 0.0 ).x
fps_msg_pos := screen_get_corners().top_right - { fps_msg_width, 0 } - { 5, 5 }
debug_draw_text( fps_msg, fps_msg_pos, 12.0, color = Color_White )
// debug_draw_text( fps_msg, {}, 12.0, color = Color_White )
debug_draw_text( fps_msg, fps_msg_pos, 38.0, color = Color_Red )
// debug_text( "Screen Width : %v", rl.GetScreenWidth () )
// debug_text( "Screen Height: %v", rl.GetScreenHeight() )
// debug_text( "frametime_target_ms : %f ms", frametime_target_ms )
debug_text( "frametime : %f ms", frametime_delta_ms )
// debug_text( "frametime_last_elapsed_ms : %f ms", frametime_elapsed_ms )
if replay.mode == ReplayMode.Record {
debug_text( "Recording Input")
}
if replay.mode == ReplayMode.Playback {
debug_text( "Replaying Input")
}
// debug_text("Zoom Target: %v", project.workspace.zoom_target)
if debug.mouse_vis {
debug_text("Mouse scroll: %v", input.mouse.scroll )
debug_text("Mouse Delta : %v", input.mouse.delta )
debug_text("Mouse Position (Render) : %v", input.mouse.raw_pos )
debug_text("Mouse Position (Screen) : %v", input.mouse.pos )
debug_text("Mouse Position (Workspace View): %v", screen_to_ws_view_pos(input.mouse.pos) )
// rl.DrawCircleV( input.mouse.raw_pos, 10, Color_White_A125 )
// rl.DrawCircleV( screen_to_render_pos(input.mouse.pos), 2, Color_BG )
}
render_text_layer()
}
@ -300,7 +299,7 @@ render_text_layer :: proc()
fs_target_uniform := Ve_Draw_Text_Fs_Params {
down_sample = 0,
colour = {1.0, 1.0, 1.0, 1},
colour = draw_call.colour,
}
if draw_call.pass == .Target_Uncached {

View File

@ -78,12 +78,17 @@ update :: proc( delta_time : f64 ) -> b32
project.workspace.cam.view = transmute(Vec2) window.extent
}
state.input, state.input_prev = swap( state.input, state.input_prev )
// state.input, state.input_prev = swap( state.input, state.input_prev )
{
temp := state.input_prev
state.input_prev = state.input
state.input = temp
}
pull_staged_input_events( state.input, & state.input_events, state.staged_input_events )
poll_input_events( state.input, state.input_prev, state.input_events )
debug_actions : DebugActions = {}
// poll_debug_actions( & debug_actions, state.input )
poll_debug_actions( & debug_actions, state.input )
// Saving & Loading
{