mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-04 12:58:41 +00:00
strip out update/render/repaint window cruft; promote layer per-tick APIs to base layer
This commit is contained in:
@@ -102,3 +102,23 @@ supplement_thread_base_entry_point(void (*entry_point)(void *params), void *para
|
|||||||
entry_point(params);
|
entry_point(params);
|
||||||
tctx_release();
|
tctx_release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal B32
|
||||||
|
update(void)
|
||||||
|
{
|
||||||
|
ProfTick(0);
|
||||||
|
#if defined(TEXT_CACHE_H)
|
||||||
|
txt_user_clock_tick();
|
||||||
|
#endif
|
||||||
|
#if defined(DASM_CACHE_H)
|
||||||
|
dasm_user_clock_tick();
|
||||||
|
#endif
|
||||||
|
#if defined(GEO_CACHE_H)
|
||||||
|
geo_user_clock_tick();
|
||||||
|
#endif
|
||||||
|
#if defined(TEXTURE_CACHE_H)
|
||||||
|
tex_user_clock_tick();
|
||||||
|
#endif
|
||||||
|
B32 result = frame();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,5 +6,6 @@
|
|||||||
|
|
||||||
internal void main_thread_base_entry_point(void (*entry_point)(CmdLine *cmdline), char **arguments, U64 arguments_count);
|
internal void main_thread_base_entry_point(void (*entry_point)(CmdLine *cmdline), char **arguments, U64 arguments_count);
|
||||||
internal void supplement_thread_base_entry_point(void (*entry_point)(void *params), void *params);
|
internal void supplement_thread_base_entry_point(void (*entry_point)(void *params), void *params);
|
||||||
|
internal B32 update(void);
|
||||||
|
|
||||||
#endif // BASE_ENTRY_POINT_H
|
#endif // BASE_ENTRY_POINT_H
|
||||||
|
|||||||
@@ -1075,7 +1075,6 @@ df_window_open(Vec2F32 size, OS_Handle preferred_monitor, D_CfgSrc cfg_src)
|
|||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
os_window_equip_repaint(window->os, df_state->repaint_hook, window);
|
|
||||||
DLLPushBack(df_state->first_window, df_state->last_window, window);
|
DLLPushBack(df_state->first_window, df_state->last_window, window);
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
@@ -7834,7 +7833,7 @@ df_msg_(DF_MsgKind kind, D_Regs *regs)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
df_init(OS_WindowRepaintFunctionType *window_repaint_entry_point, D_StateDeltaHistory *hist)
|
df_init(D_StateDeltaHistory *hist)
|
||||||
{
|
{
|
||||||
ProfBeginFunction();
|
ProfBeginFunction();
|
||||||
Arena *arena = arena_alloc();
|
Arena *arena = arena_alloc();
|
||||||
@@ -7853,7 +7852,6 @@ df_init(OS_WindowRepaintFunctionType *window_repaint_entry_point, D_StateDeltaHi
|
|||||||
df_state->entity_ctx_menu_key = ui_key_from_string(ui_key_zero(), str8_lit("_entity_ctx_menu_"));
|
df_state->entity_ctx_menu_key = ui_key_from_string(ui_key_zero(), str8_lit("_entity_ctx_menu_"));
|
||||||
df_state->tab_ctx_menu_key = ui_key_from_string(ui_key_zero(), str8_lit("_tab_ctx_menu_"));
|
df_state->tab_ctx_menu_key = ui_key_from_string(ui_key_zero(), str8_lit("_tab_ctx_menu_"));
|
||||||
df_state->string_search_arena = arena_alloc();
|
df_state->string_search_arena = arena_alloc();
|
||||||
df_state->repaint_hook = window_repaint_entry_point;
|
|
||||||
df_state->cfg_main_font_path_arena = arena_alloc();
|
df_state->cfg_main_font_path_arena = arena_alloc();
|
||||||
df_state->cfg_code_font_path_arena = arena_alloc();
|
df_state->cfg_code_font_path_arena = arena_alloc();
|
||||||
df_state->rich_hover_info_next_arena = arena_alloc();
|
df_state->rich_hover_info_next_arena = arena_alloc();
|
||||||
@@ -7959,10 +7957,11 @@ df_init(OS_WindowRepaintFunctionType *window_repaint_entry_point, D_StateDeltaHi
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
df_frame(OS_Handle repaint_window_handle)
|
df_frame(void)
|
||||||
{
|
{
|
||||||
Temp scratch = scratch_begin(0, 0);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
DI_Scope *di_scope = di_scope_open();
|
DI_Scope *di_scope = di_scope_open();
|
||||||
|
local_persist S32 depth = 0;
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: mark user-facing thread tick
|
//- rjf: mark user-facing thread tick
|
||||||
@@ -7977,7 +7976,7 @@ df_frame(OS_Handle repaint_window_handle)
|
|||||||
//- rjf: get events from the OS
|
//- rjf: get events from the OS
|
||||||
//
|
//
|
||||||
OS_EventList events = {0};
|
OS_EventList events = {0};
|
||||||
if(os_handle_match(repaint_window_handle, os_handle_zero()))
|
if(depth == 0) DeferLoop(depth += 1, depth -= 1)
|
||||||
{
|
{
|
||||||
events = os_get_events(scratch.arena, df_state->num_frames_requested == 0);
|
events = os_get_events(scratch.arena, df_state->num_frames_requested == 0);
|
||||||
}
|
}
|
||||||
@@ -12319,7 +12318,7 @@ df_frame(OS_Handle repaint_window_handle)
|
|||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- rjf: show windows after first frame
|
//- rjf: show windows after first frame
|
||||||
//
|
//
|
||||||
if(os_handle_match(repaint_window_handle, os_handle_zero()))
|
if(depth == 0)
|
||||||
{
|
{
|
||||||
D_HandleList windows_to_show = {0};
|
D_HandleList windows_to_show = {0};
|
||||||
for(DF_Window *w = df_state->first_window; w != 0; w = w->next)
|
for(DF_Window *w = df_state->first_window; w != 0; w = w->next)
|
||||||
@@ -12332,7 +12331,7 @@ df_frame(OS_Handle repaint_window_handle)
|
|||||||
for(D_HandleNode *n = windows_to_show.first; n != 0; n = n->next)
|
for(D_HandleNode *n = windows_to_show.first; n != 0; n = n->next)
|
||||||
{
|
{
|
||||||
DF_Window *window = df_window_from_handle(n->handle);
|
DF_Window *window = df_window_from_handle(n->handle);
|
||||||
os_window_first_paint(window->os);
|
DeferLoop(depth += 1, depth -= 1) os_window_first_paint(window->os);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -660,7 +660,6 @@ struct DF_State
|
|||||||
D_CmdParamSlotViewSpecRuleList cmd_param_slot_view_spec_table[D_CmdParamSlot_COUNT];
|
D_CmdParamSlotViewSpecRuleList cmd_param_slot_view_spec_table[D_CmdParamSlot_COUNT];
|
||||||
|
|
||||||
// rjf: windows
|
// rjf: windows
|
||||||
OS_WindowRepaintFunctionType *repaint_hook;
|
|
||||||
DF_Window *first_window;
|
DF_Window *first_window;
|
||||||
DF_Window *last_window;
|
DF_Window *last_window;
|
||||||
DF_Window *free_window;
|
DF_Window *free_window;
|
||||||
@@ -967,7 +966,7 @@ __VA_ARGS__\
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Main Layer Top-Level Calls
|
//~ rjf: Main Layer Top-Level Calls
|
||||||
|
|
||||||
internal void df_init(OS_WindowRepaintFunctionType *window_repaint_entry_point, D_StateDeltaHistory *hist);
|
internal void df_init(D_StateDeltaHistory *hist);
|
||||||
internal void df_frame(OS_Handle repaint_window_handle);
|
internal void df_frame(void);
|
||||||
|
|
||||||
#endif // DBG_FRONTEND_CORE_H
|
#endif // DBG_FRONTEND_CORE_H
|
||||||
|
|||||||
@@ -142,12 +142,6 @@ os_window_first_paint(OS_Handle handle)
|
|||||||
XMapWindow(os_lnx_gfx_state->display, w->window);
|
XMapWindow(os_lnx_gfx_state->display, w->window);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
|
||||||
os_window_equip_repaint(OS_Handle handle, OS_WindowRepaintFunctionType *repaint, void *user_data)
|
|
||||||
{
|
|
||||||
if(os_handle_match(handle, os_handle_zero())) {return;}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_focus(OS_Handle handle)
|
os_window_focus(OS_Handle handle)
|
||||||
{
|
{
|
||||||
|
|||||||
+5
-3
@@ -24,8 +24,6 @@ enum
|
|||||||
OS_WindowFlag_CustomBorder = (1<<0),
|
OS_WindowFlag_CustomBorder = (1<<0),
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void OS_WindowRepaintFunctionType(OS_Handle window, void *user_data);
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Cursor Types
|
//~ rjf: Cursor Types
|
||||||
|
|
||||||
@@ -103,6 +101,11 @@ struct OS_EventList
|
|||||||
OS_Event *last;
|
OS_Event *last;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
//~ rjf: Application-Defined Frame Hook Forward Declaration
|
||||||
|
|
||||||
|
internal B32 frame(void);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Event Functions (Helpers, Implemented Once)
|
//~ rjf: Event Functions (Helpers, Implemented Once)
|
||||||
|
|
||||||
@@ -139,7 +142,6 @@ internal String8 os_get_clipboard_text(Arena *arena);
|
|||||||
internal OS_Handle os_window_open(Vec2F32 resolution, OS_WindowFlags flags, String8 title);
|
internal OS_Handle os_window_open(Vec2F32 resolution, OS_WindowFlags flags, String8 title);
|
||||||
internal void os_window_close(OS_Handle window);
|
internal void os_window_close(OS_Handle window);
|
||||||
internal void os_window_first_paint(OS_Handle window);
|
internal void os_window_first_paint(OS_Handle window);
|
||||||
internal void os_window_equip_repaint(OS_Handle window, OS_WindowRepaintFunctionType *repaint, void *user_data);
|
|
||||||
internal void os_window_focus(OS_Handle window);
|
internal void os_window_focus(OS_Handle window);
|
||||||
internal B32 os_window_is_focused(OS_Handle window);
|
internal B32 os_window_is_focused(OS_Handle window);
|
||||||
internal B32 os_window_is_fullscreen(OS_Handle window);
|
internal B32 os_window_is_fullscreen(OS_Handle window);
|
||||||
|
|||||||
@@ -50,11 +50,6 @@ os_window_first_paint(OS_Handle window)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
|
||||||
os_window_equip_repaint(OS_Handle window, OS_WindowRepaintFunctionType *repaint, void *user_data)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_focus(OS_Handle window)
|
os_window_focus(OS_Handle window)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -357,17 +357,10 @@ os_w32_wnd_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||||||
case WM_SIZE:
|
case WM_SIZE:
|
||||||
case WM_PAINT:
|
case WM_PAINT:
|
||||||
{
|
{
|
||||||
if(window->repaint != 0)
|
PAINTSTRUCT ps = {0};
|
||||||
{
|
BeginPaint(hwnd, &ps);
|
||||||
PAINTSTRUCT ps = {0};
|
update();
|
||||||
BeginPaint(hwnd, &ps);
|
EndPaint(hwnd, &ps);
|
||||||
window->repaint(os_w32_handle_from_window(window), window->repaint_user_data);
|
|
||||||
EndPaint(hwnd, &ps);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result = DefWindowProcW(hwnd, uMsg, wParam, lParam);
|
|
||||||
}
|
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
@@ -1089,14 +1082,6 @@ os_window_first_paint(OS_Handle window_handle)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
|
||||||
os_window_equip_repaint(OS_Handle handle, OS_WindowRepaintFunctionType *repaint, void *user_data)
|
|
||||||
{
|
|
||||||
OS_W32_Window *window = os_w32_window_from_handle(handle);
|
|
||||||
window->repaint = repaint;
|
|
||||||
window->repaint_user_data = user_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
os_window_focus(OS_Handle handle)
|
os_window_focus(OS_Handle handle)
|
||||||
{
|
{
|
||||||
@@ -1125,8 +1110,6 @@ internal void
|
|||||||
os_window_set_fullscreen(OS_Handle handle, B32 fullscreen)
|
os_window_set_fullscreen(OS_Handle handle, B32 fullscreen)
|
||||||
{
|
{
|
||||||
OS_W32_Window *window = os_w32_window_from_handle(handle);
|
OS_W32_Window *window = os_w32_window_from_handle(handle);
|
||||||
OS_WindowRepaintFunctionType *repaint = window->repaint;
|
|
||||||
window->repaint = 0;
|
|
||||||
DWORD window_style = GetWindowLong(window->hwnd, GWL_STYLE);
|
DWORD window_style = GetWindowLong(window->hwnd, GWL_STYLE);
|
||||||
B32 is_fullscreen_already = os_window_is_fullscreen(handle);
|
B32 is_fullscreen_already = os_window_is_fullscreen(handle);
|
||||||
if(fullscreen)
|
if(fullscreen)
|
||||||
@@ -1155,7 +1138,6 @@ os_window_set_fullscreen(OS_Handle handle, B32 fullscreen)
|
|||||||
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
|
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
|
||||||
SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
|
SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
|
||||||
}
|
}
|
||||||
window->repaint = repaint;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
|
|||||||
@@ -39,8 +39,6 @@ struct OS_W32_Window
|
|||||||
OS_W32_Window *prev;
|
OS_W32_Window *prev;
|
||||||
HWND hwnd;
|
HWND hwnd;
|
||||||
WINDOWPLACEMENT last_window_placement;
|
WINDOWPLACEMENT last_window_placement;
|
||||||
OS_WindowRepaintFunctionType *repaint;
|
|
||||||
void *repaint_user_data;
|
|
||||||
F32 dpi;
|
F32 dpi;
|
||||||
B32 first_paint_done;
|
B32 first_paint_done;
|
||||||
B32 maximized;
|
B32 maximized;
|
||||||
|
|||||||
+24
-23
@@ -656,13 +656,22 @@ ipc_signaler_thread__entry_point(void *p)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////
|
||||||
|
//~ rjf: Ctrl -> Main Thread Wakeup Hook
|
||||||
|
|
||||||
|
internal CTRL_WAKEUP_FUNCTION_DEF(wakeup_hook_ctrl)
|
||||||
|
{
|
||||||
|
os_send_wakeup_event();
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Per-Frame Entry Point
|
//~ rjf: Per-Frame Entry Point
|
||||||
|
|
||||||
internal void
|
internal B32
|
||||||
update_and_render(OS_Handle repaint_window_handle, void *user_data)
|
frame(void)
|
||||||
{
|
{
|
||||||
ProfBeginFunction();
|
ProfBeginFunction();
|
||||||
|
B32 should_quit = 0;
|
||||||
Temp scratch = scratch_begin(0, 0);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
|
|
||||||
//- rjf: begin logging
|
//- rjf: begin logging
|
||||||
@@ -679,7 +688,7 @@ update_and_render(OS_Handle repaint_window_handle, void *user_data)
|
|||||||
log_scope_begin();
|
log_scope_begin();
|
||||||
|
|
||||||
//- rjf: do frontend frame
|
//- rjf: do frontend frame
|
||||||
df_frame(repaint_window_handle);
|
df_frame();
|
||||||
|
|
||||||
//- rjf: end logging
|
//- rjf: end logging
|
||||||
{
|
{
|
||||||
@@ -691,16 +700,15 @@ update_and_render(OS_Handle repaint_window_handle, void *user_data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- rjf: quit if no windows are left
|
||||||
|
if(df_state->first_window == 0)
|
||||||
|
{
|
||||||
|
should_quit = 1;
|
||||||
|
}
|
||||||
|
|
||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
ProfEnd();
|
ProfEnd();
|
||||||
}
|
return should_quit;
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
//~ rjf: Ctrl -> Main Thread Wakeup Hook
|
|
||||||
|
|
||||||
internal CTRL_WAKEUP_FUNCTION_DEF(wakeup_hook_ctrl)
|
|
||||||
{
|
|
||||||
os_send_wakeup_event();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
@@ -798,7 +806,7 @@ entry_point(CmdLine *cmd_line)
|
|||||||
fnt_init();
|
fnt_init();
|
||||||
D_StateDeltaHistory *hist = d_state_delta_history_alloc();
|
D_StateDeltaHistory *hist = d_state_delta_history_alloc();
|
||||||
d_init(cmd_line, hist);
|
d_init(cmd_line, hist);
|
||||||
df_init(update_and_render, d_state_delta_history());
|
df_init(d_state_delta_history());
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: setup initial target from command line args
|
//- rjf: setup initial target from command line args
|
||||||
@@ -874,7 +882,7 @@ entry_point(CmdLine *cmd_line)
|
|||||||
|
|
||||||
//- rjf: main application loop
|
//- rjf: main application loop
|
||||||
{
|
{
|
||||||
for(;;)
|
for(B32 quit = 0; !quit;)
|
||||||
{
|
{
|
||||||
//- rjf: consume IPC messages, dispatch UI commands
|
//- rjf: consume IPC messages, dispatch UI commands
|
||||||
{
|
{
|
||||||
@@ -939,9 +947,8 @@ entry_point(CmdLine *cmd_line)
|
|||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: update & render frame
|
//- rjf: update
|
||||||
OS_Handle repaint_window = {0};
|
quit = update();
|
||||||
update_and_render(repaint_window, 0);
|
|
||||||
|
|
||||||
//- rjf: auto run
|
//- rjf: auto run
|
||||||
if(auto_run)
|
if(auto_run)
|
||||||
@@ -963,12 +970,6 @@ entry_point(CmdLine *cmd_line)
|
|||||||
jit_attach = 0;
|
jit_attach = 0;
|
||||||
d_cmd(D_CmdKind_Attach, .id = jit_pid);
|
d_cmd(D_CmdKind_Attach, .id = jit_pid);
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: quit if no windows are left
|
|
||||||
if(df_state->first_window == 0)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1037,7 +1038,7 @@ entry_point(CmdLine *cmd_line)
|
|||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
//- rjf: built-in pdb/dwarf -> raddbg converter mode
|
//- rjf: built-in pdb/dwarf -> rdi converter mode
|
||||||
case ExecMode_Converter:
|
case ExecMode_Converter:
|
||||||
{
|
{
|
||||||
Temp scratch = scratch_begin(0, 0);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user