diff --git a/src/dbg_engine/dbg_engine_core.c b/src/dbg_engine/dbg_engine_core.c index b9f26447..db00cea6 100644 --- a/src/dbg_engine/dbg_engine_core.c +++ b/src/dbg_engine/dbg_engine_core.c @@ -7788,6 +7788,7 @@ d_tick(Arena *arena, DI_Scope *di_scope, D_CmdList *cmds, F32 dt) } arena_clear(d_state->msgs_arena); MemoryZeroStruct(&d_state->msgs); + scratch_end(scratch); } ////////////////////////////// @@ -9610,27 +9611,3 @@ d_tick(Arena *arena, DI_Scope *di_scope, D_CmdList *cmds, F32 dt) ProfEnd(); } - -internal void -d_end_frame(void) -{ - ProfBeginFunction(); - - //- rjf: write config changes - ProfScope("write config changes") - { - for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1)) ProfScope("write %.*s config data", str8_varg(d_cfg_src_string_table[src])) - { - if(d_state->cfg_write_issued[src]) - { - d_state->cfg_write_issued[src] = 0; - String8 path = d_cfg_path_from_src(src); - os_write_data_list_to_file_path(path, d_state->cfg_write_data[src]); - } - arena_clear(d_state->cfg_write_arenas[src]); - MemoryZeroStruct(&d_state->cfg_write_data[src]); - } - } - - ProfEnd(); -} diff --git a/src/dbg_engine/dbg_engine_core.h b/src/dbg_engine/dbg_engine_core.h index a5570d9f..798b1fa9 100644 --- a/src/dbg_engine/dbg_engine_core.h +++ b/src/dbg_engine/dbg_engine_core.h @@ -1575,6 +1575,5 @@ __VA_ARGS__\ internal void d_init(CmdLine *cmdln, D_StateDeltaHistory *hist); internal D_CmdList d_gather_root_cmds(Arena *arena); internal void d_tick(Arena *arena, DI_Scope *di_scope, D_CmdList *cmds, F32 dt); -internal void d_end_frame(void); #endif // DBG_ENGINE_CORE_H diff --git a/src/dbg_frontend/dbg_frontend.mdesk b/src/dbg_frontend/dbg_frontend.mdesk index 80895bb4..fce82ded 100644 --- a/src/dbg_frontend/dbg_frontend.mdesk +++ b/src/dbg_frontend/dbg_frontend.mdesk @@ -20,9 +20,6 @@ DF_MsgKindTable: {WriteUserData write_user_data 0 0 Null Nil 0 0 0 0 0 0 Null ""} {WriteProjectData write_project_data 0 0 Null Nil 0 0 0 0 0 0 Null ""} - //- rjf: notifications - {Error error 0 0 Null Nil 0 0 0 0 0 0 Null ""} - //- rjf: windows {OpenWindow open_window 0 0 Null Nil 0 0 0 0 0 0 Null ""} {CloseWindow close_window 0 0 Null Nil 0 0 0 0 0 0 Null ""} diff --git a/src/dbg_frontend/dbg_frontend_core.c b/src/dbg_frontend/dbg_frontend_core.c index 1b2b19b8..534f3e29 100644 --- a/src/dbg_frontend/dbg_frontend_core.c +++ b/src/dbg_frontend/dbg_frontend_core.c @@ -7839,6 +7839,7 @@ df_init(OS_WindowRepaintFunctionType *window_repaint_entry_point, D_StateDeltaHi Arena *arena = arena_alloc(); df_state = push_array(arena, DF_State, 1); df_state->arena = arena; + df_state->msgs_arena = arena_alloc(); df_state->num_frames_requested = 2; df_state->hist = hist; df_state->key_map_arena = arena_alloc(); @@ -7960,6 +7961,24 @@ internal void df_begin_frame(Arena *arena, D_CmdList *cmds) { ProfBeginFunction(); + + ProfEnd(); +} + +internal void +df_frame(D_CmdList *cmds, F32 dt) +{ + Temp scratch = scratch_begin(0, 0); + DI_Scope *di_scope = di_scope_open(); + + ////////////////////////////// + //- rjf: tick debug engine + // + d_tick(scratch.arena, di_scope, cmds, dt); + + ////////////////////////////// + //- rjf: apply new rich hover info + // arena_clear(df_state->rich_hover_info_current_arena); MemoryCopyStruct(&df_state->rich_hover_info_current, &df_state->rich_hover_info_next); df_state->rich_hover_info_current.dbgi_key = di_key_copy(df_state->rich_hover_info_current_arena, &df_state->rich_hover_info_current.dbgi_key); @@ -7979,6 +7998,47 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) } } + ////////////////////////////// + //- rjf: animate theme + // + { + DF_Theme *current = &df_state->cfg_theme; + DF_Theme *target = &df_state->cfg_theme_target; + F32 rate = 1 - pow_f32(2, (-50.f * d_dt())); + for(DF_ThemeColor color = DF_ThemeColor_Null; + color < DF_ThemeColor_COUNT; + color = (DF_ThemeColor)(color+1)) + { + if(abs_f32(target->colors[color].x - current->colors[color].x) > 0.01f || + abs_f32(target->colors[color].y - current->colors[color].y) > 0.01f || + abs_f32(target->colors[color].z - current->colors[color].z) > 0.01f || + abs_f32(target->colors[color].w - current->colors[color].w) > 0.01f) + { + df_request_frame(); + } + current->colors[color].x += (target->colors[color].x - current->colors[color].x) * rate; + current->colors[color].y += (target->colors[color].y - current->colors[color].y) * rate; + current->colors[color].z += (target->colors[color].z - current->colors[color].z) * rate; + current->colors[color].w += (target->colors[color].w - current->colors[color].w) * rate; + } + } + + ////////////////////////////// + //- rjf: animate alive-transitions for entities + // + { + F32 rate = 1.f - pow_f32(2.f, -20.f*d_dt()); + for(D_Entity *e = d_entity_root(); !d_entity_is_nil(e); e = d_entity_rec_depth_first_pre(e, d_entity_root()).next) + { + F32 diff = (1.f - e->alive_t); + e->alive_t += diff * rate; + if(diff >= 0.01f) + { + df_request_frame(); + } + } + } + ////////////////////////////// //- rjf: capture is active? -> keep rendering // @@ -7987,19 +8047,149 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) df_request_frame(); } + ////////////////////////////// + //- rjf: commit params changes for all views + // + { + for(DF_View *v = df_state->first_view; !df_view_is_nil(v); v = v->alloc_next) + { + if(v->params_write_gen == v->params_read_gen+1) + { + v->params_read_gen += 1; + } + } + } + + ////////////////////////////// + //- rjf: process messages + // + ProfScope("process messages") + { + for(DF_MsgNode *n = df_state->msgs.first; n != 0; n = n->next) + { + DF_Msg *msg = &n->v; + D_Regs *regs = msg->regs; + D_RegsScope + { + d_regs_copy_contents(scratch.arena, d_regs(), regs); + switch(msg->kind) + { + default:{}break; + + //- rjf: meta + case DF_MsgKind_Null:{}break; + case DF_MsgKind_Exit:{}break; + case DF_MsgKind_RunCommand:{}break; + case DF_MsgKind_ToggleDevMenu:{}break; + + //- rjf: config reading/writing + case DF_MsgKind_ApplyUserData:{}break; + case DF_MsgKind_ApplyProjectData:{}break; + case DF_MsgKind_WriteUserData:{}break; + case DF_MsgKind_WriteProjectData:{}break; + + //- rjf: windows + case DF_MsgKind_OpenWindow:{}break; + case DF_MsgKind_CloseWindow:{}break; + case DF_MsgKind_ToggleFullscreen:{}break; + + //- rjf: confirmation + case DF_MsgKind_ConfirmAccept:{}break; + case DF_MsgKind_ConfirmCancel:{}break; + + //- rjf: queries + case DF_MsgKind_CompleteQuery:{}break; + case DF_MsgKind_CancelQuery:{}break; + + //- rjf: searching + case DF_MsgKind_FindTextForward:{}break; + case DF_MsgKind_FindTextBackward:{}break; + case DF_MsgKind_FindNext:{}break; + case DF_MsgKind_FindPrev:{}break; + + //- rjf: font sizes + case DF_MsgKind_IncUIFontScale:{}break; + case DF_MsgKind_DecUIFontScale:{}break; + case DF_MsgKind_IncCodeFontScale:{}break; + case DF_MsgKind_DecCodeFontScale:{}break; + + //- rjf: panel creation/removal + case DF_MsgKind_NewPanelLeft:{}break; + case DF_MsgKind_NewPanelUp:{}break; + case DF_MsgKind_NewPanelRight:{}break; + case DF_MsgKind_NewPanelDown:{}break; + case DF_MsgKind_SplitPanel:{}break; + case DF_MsgKind_ClosePanel:{}break; + + //- rjf: panel rearranging + case DF_MsgKind_RotatePanelColumns:{}break; + + //- rjf: panel focusing + case DF_MsgKind_NextPanel:{}break; + case DF_MsgKind_PrevPanel:{}break; + case DF_MsgKind_FocusPanel:{}break; + case DF_MsgKind_FocusPanelRight:{}break; + case DF_MsgKind_FocusPanelLeft:{}break; + case DF_MsgKind_FocusPanelUp:{}break; + case DF_MsgKind_FocusPanelDown:{}break; + + //- rjf: view history navigation + case DF_MsgKind_GoBack:{}break; + case DF_MsgKind_GoForward:{}break; + + //- rjf: tab selection + case DF_MsgKind_NextTab:{}break; + case DF_MsgKind_PrevTab:{}break; + + //- rjf: tab rearranging + case DF_MsgKind_MoveTabRight:{}break; + case DF_MsgKind_MoveTabLeft:{}break; + case DF_MsgKind_MoveTab:{}break; + + //- rjf: tab creation/removal + case DF_MsgKind_OpenTab:{}break; + case DF_MsgKind_CloseTab:{}break; + + //- rjf: panel tab settings + case DF_MsgKind_TabBarTop:{}break; + case DF_MsgKind_TabBarBottom:{}break; + + //- rjf: tab filters + case DF_MsgKind_Filter:{}break; + case DF_MsgKind_ClearFilter:{}break; + case DF_MsgKind_ApplyFilter:{}break; + + //- rjf: default panel layouts + case DF_MsgKind_ResetToDefaultPanels:{}break; + case DF_MsgKind_ResetToCompactPanels:{}break; + + //- rjf: filesystem fast paths + case DF_MsgKind_Open:{}break; + case DF_MsgKind_Switch:{}break; + case DF_MsgKind_SwitchToPartnerFile:{}break; + + //- rjf: snapping to code locations + case DF_MsgKind_FindThread:{}break; + case DF_MsgKind_FindSelectedThread:{}break; + case DF_MsgKind_GoToName:{}break; + case DF_MsgKind_FindCodeLocation:{}break; + } + } + } + arena_clear(df_state->msgs_arena); + MemoryZeroStruct(&df_state->msgs); + } + ////////////////////////////// //- rjf: process top-level graphical commands // B32 panel_reset_done = 0; { B32 cfg_write_done[D_CfgSrc_COUNT] = {0}; - Temp scratch = scratch_begin(&arena, 1); for(D_CmdNode *cmd_node = cmds->first; cmd_node != 0; cmd_node = cmd_node->next) { - temp_end(scratch); - // rjf: unpack command D_Cmd * cmd = &cmd_node->cmd; D_CmdParams *params = &cmd->params; @@ -8025,7 +8215,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) { D_CmdParams p = *params; p.view_spec = view_spec; - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_OpenTab)); + d_cmd_list_push(scratch.arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_OpenTab)); } }break; @@ -8190,7 +8380,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) case D_CmdKind_SelectUnwind: thread_locator:; { - d_cmd_list_push(arena, cmds, params, d_cmd_spec_from_kind(D_CmdKind_FindThread)); + d_cmd_list_push(scratch.arena, cmds, params, d_cmd_spec_from_kind(D_CmdKind_FindThread)); }break; //- rjf: loading/applying stateful config changes @@ -8793,11 +8983,11 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) D_CmdParams blank_params = df_cmd_params_from_window(ws); if(monitor_dim.x < 1920) { - d_cmd_list_push(arena, cmds, &blank_params, d_cmd_spec_from_kind(D_CmdKind_ResetToCompactPanels)); + d_cmd_list_push(scratch.arena, cmds, &blank_params, d_cmd_spec_from_kind(D_CmdKind_ResetToCompactPanels)); } else { - d_cmd_list_push(arena, cmds, &blank_params, d_cmd_spec_from_kind(D_CmdKind_ResetToDefaultPanels)); + d_cmd_list_push(scratch.arena, cmds, &blank_params, d_cmd_spec_from_kind(D_CmdKind_ResetToDefaultPanels)); } } @@ -8874,13 +9064,13 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) { D_CmdParams p = *params; p.string = df_push_search_string(scratch.arena); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FindTextForward)); + d_cmd_list_push(scratch.arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FindTextForward)); }break; case D_CmdKind_FindPrev: { D_CmdParams p = *params; p.string = df_push_search_string(scratch.arena); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FindTextBackward)); + d_cmd_list_push(scratch.arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FindTextBackward)); }break; //- rjf: font sizes @@ -9025,7 +9215,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) move_tab_panel != new_panel->prev && move_tab_panel != new_panel->next) { D_CmdParams p = df_cmd_params_from_panel(ws, move_tab_panel); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_ClosePanel)); + d_cmd_list_push(scratch.arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_ClosePanel)); } } }break; @@ -9075,7 +9265,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) { D_CmdParams p = df_cmd_params_from_window(ws); p.panel = df_handle_from_panel(panel); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FocusPanel)); + d_cmd_list_push(scratch.arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FocusPanel)); break; } } @@ -9133,7 +9323,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) } D_CmdParams p = df_cmd_params_from_window(ws); p.panel = df_handle_from_panel(dst_panel); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FocusPanel)); + d_cmd_list_push(scratch.arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FocusPanel)); } }break; @@ -9285,7 +9475,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) p.dest_panel = df_handle_from_panel(panel); p.view = df_handle_from_view(view); p.prev_view = df_handle_from_view(prev_view); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_MoveTab)); + d_cmd_list_push(scratch.arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_MoveTab)); } }break; case D_CmdKind_OpenTab: @@ -9353,7 +9543,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) if(src_panel_is_empty && src_panel != ws->root_panel) { D_CmdParams p = df_cmd_params_from_panel(ws, src_panel); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_ClosePanel)); + d_cmd_list_push(scratch.arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_ClosePanel)); } } }break; @@ -9379,7 +9569,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) D_CmdParams p = *params; p.window = df_handle_from_window(ws); p.panel = df_handle_from_panel(ws->focused_panel); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_PendingFile)); + d_cmd_list_push(scratch.arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_PendingFile)); } else { @@ -9876,7 +10066,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) params.vaddr = rip_vaddr; params.unwind_index = unwind_index; params.inline_depth = inline_depth; - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_FindCodeLocation)); + d_cmd_list_push(scratch.arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_FindCodeLocation)); } // rjf: snap to resolved address w/o line info @@ -9888,7 +10078,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) params.vaddr = rip_vaddr; params.unwind_index = unwind_index; params.inline_depth = inline_depth; - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_FindCodeLocation)); + d_cmd_list_push(scratch.arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_FindCodeLocation)); } // rjf: retry on stopped, pending debug info @@ -9907,7 +10097,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) params.entity = d_handle_from_entity(selected_thread); params.unwind_index = d_base_regs()->unwind_count; params.inline_depth = d_base_regs()->inline_depth; - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_FindThread)); + d_cmd_list_push(scratch.arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_FindThread)); }break; //- rjf: name finding @@ -10055,7 +10245,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) } } } - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FindCodeLocation)); + d_cmd_list_push(scratch.arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FindCodeLocation)); } } @@ -10066,7 +10256,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) D_CmdParams p = *params; p.file_path = path; p.text_point = txt_pt(1, 1); - d_cmd_list_push(arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FindCodeLocation)); + d_cmd_list_push(scratch.arena, cmds, &p, d_cmd_spec_from_kind(D_CmdKind_FindCodeLocation)); } } }break; @@ -10080,7 +10270,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) default: break; case D_EntityKind_Target: { - d_cmd_list_push(arena, cmds, params, d_cmd_spec_from_kind(D_CmdKind_EditTarget)); + d_cmd_list_push(scratch.arena, cmds, params, d_cmd_spec_from_kind(D_CmdKind_EditTarget)); }break; } }break; @@ -10091,7 +10281,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) D_Entity *entity = d_entity_from_handle(params->entity); if(!d_entity_is_nil(entity) && entity->kind == D_EntityKind_Target) { - d_cmd_list_push(arena, cmds, params, d_cmd_spec_from_kind(D_CmdKind_Target)); + d_cmd_list_push(scratch.arena, cmds, params, d_cmd_spec_from_kind(D_CmdKind_Target)); } else { @@ -10132,7 +10322,7 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) { D_CmdParams params = df_cmd_params_from_panel(ws, panel); params.entity = d_handle_from_entity(entity); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_EditTarget)); + d_cmd_list_push(scratch.arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_EditTarget)); }break; } }break; @@ -10373,8 +10563,8 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) dst_panel->selected_tab_view = df_handle_from_view(dst_view); D_CmdParams params = df_cmd_params_from_view(ws, dst_panel, dst_view); params.text_point = point; - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_GoToLine)); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(cursor_snap_kind)); + d_cmd_list_push(scratch.arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_GoToLine)); + d_cmd_list_push(scratch.arena, cmds, ¶ms, d_cmd_spec_from_kind(cursor_snap_kind)); panel_used_for_src_code = dst_panel; } } @@ -10420,8 +10610,8 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) D_CmdParams params = df_cmd_params_from_view(ws, dst_panel, dst_view); params.entity = d_handle_from_entity(process); params.vaddr = vaddr; - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_GoToAddress)); - d_cmd_list_push(arena, cmds, ¶ms, d_cmd_spec_from_kind(cursor_snap_kind)); + d_cmd_list_push(scratch.arena, cmds, ¶ms, d_cmd_spec_from_kind(D_CmdKind_GoToAddress)); + d_cmd_list_push(scratch.arena, cmds, ¶ms, d_cmd_spec_from_kind(cursor_snap_kind)); } } }break; @@ -10526,106 +10716,21 @@ df_begin_frame(Arena *arena, D_CmdList *cmds) }break; } } - scratch_end(scratch); } ////////////////////////////// - //- rjf: animate theme + //- rjf: queue drag drop (TODO(rjf)) // + B32 queue_drag_drop = 0; + if(queue_drag_drop) { - DF_Theme *current = &df_state->cfg_theme; - DF_Theme *target = &df_state->cfg_theme_target; - F32 rate = 1 - pow_f32(2, (-50.f * d_dt())); - for(DF_ThemeColor color = DF_ThemeColor_Null; - color < DF_ThemeColor_COUNT; - color = (DF_ThemeColor)(color+1)) - { - if(abs_f32(target->colors[color].x - current->colors[color].x) > 0.01f || - abs_f32(target->colors[color].y - current->colors[color].y) > 0.01f || - abs_f32(target->colors[color].z - current->colors[color].z) > 0.01f || - abs_f32(target->colors[color].w - current->colors[color].w) > 0.01f) - { - df_request_frame(); - } - current->colors[color].x += (target->colors[color].x - current->colors[color].x) * rate; - current->colors[color].y += (target->colors[color].y - current->colors[color].y) * rate; - current->colors[color].z += (target->colors[color].z - current->colors[color].z) * rate; - current->colors[color].w += (target->colors[color].w - current->colors[color].w) * rate; - } + df_queue_drag_drop(); } ////////////////////////////// - //- rjf: animate alive-transitions for entities + //- rjf: update/render all windows // { - F32 rate = 1.f - pow_f32(2.f, -20.f*d_dt()); - for(D_Entity *e = d_entity_root(); !d_entity_is_nil(e); e = d_entity_rec_depth_first_pre(e, d_entity_root()).next) - { - F32 diff = (1.f - e->alive_t); - e->alive_t += diff * rate; - if(diff >= 0.01f) - { - df_request_frame(); - } - } - } - - ////////////////////////////// - //- rjf: commit params changes for all views - // - { - for(DF_View *v = df_state->first_view; !df_view_is_nil(v); v = v->alloc_next) - { - if(v->params_write_gen == v->params_read_gen+1) - { - v->params_read_gen += 1; - } - } - } - - ProfEnd(); -} - -internal void -df_end_frame(void) -{ - ProfBeginFunction(); - - //- rjf: simulate lag - if(DEV_simulate_lag) - { - os_sleep_milliseconds(300); - } - - //- rjf: end drag/drop if needed - if(df_state->drag_drop_state == DF_DragDropState_Dropping) - { - df_state->drag_drop_state = DF_DragDropState_Null; - MemoryZeroStruct(&df_drag_drop_payload); - } - - //- rjf: clear frame request state - if(df_state->num_frames_requested > 0) - { - df_state->num_frames_requested -= 1; - } - - ProfEnd(); -} - -internal void -df_frame(D_CmdList *cmds, F32 dt) -{ - Temp scratch = scratch_begin(0, 0); - DI_Scope *di_scope = di_scope_open(); - d_tick(scratch.arena, di_scope, cmds, dt); - df_begin_frame(scratch.arena, cmds); - { - B32 queue_drag_drop = 0; - if(queue_drag_drop) - { - df_queue_drag_drop(); - } dr_begin_frame(); for(DF_Window *w = df_state->first_window; w != 0; w = w->next) { @@ -10644,8 +10749,49 @@ df_frame(D_CmdList *cmds, F32 dt) } } } - df_end_frame(); - d_end_frame(); + + ////////////////////////////// + //- rjf: simulate lag + // + if(DEV_simulate_lag) + { + os_sleep_milliseconds(300); + } + + ////////////////////////////// + //- rjf: end drag/drop if needed + // + if(df_state->drag_drop_state == DF_DragDropState_Dropping) + { + df_state->drag_drop_state = DF_DragDropState_Null; + MemoryZeroStruct(&df_drag_drop_payload); + } + + ////////////////////////////// + //- rjf: clear frame request state + // + if(df_state->num_frames_requested > 0) + { + df_state->num_frames_requested -= 1; + } + + ////////////////////////////// + //- rjf: write config changes (TODO(rjf): @msgs) + // + ProfScope("write config changes") + { + for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1)) ProfScope("write %.*s config data", str8_varg(d_cfg_src_string_table[src])) + { + if(d_state->cfg_write_issued[src]) + { + d_state->cfg_write_issued[src] = 0; + String8 path = d_cfg_path_from_src(src); + os_write_data_list_to_file_path(path, d_state->cfg_write_data[src]); + } + arena_clear(d_state->cfg_write_arenas[src]); + MemoryZeroStruct(&d_state->cfg_write_data[src]); + } + } ////////////////////////////// //- rjf: submit rendering to all windows diff --git a/src/dbg_frontend/dbg_frontend_core.h b/src/dbg_frontend/dbg_frontend_core.h index 41efffd1..45c6247e 100644 --- a/src/dbg_frontend/dbg_frontend_core.h +++ b/src/dbg_frontend/dbg_frontend_core.h @@ -963,8 +963,6 @@ __VA_ARGS__\ //~ rjf: Main Layer Top-Level Calls internal void df_init(OS_WindowRepaintFunctionType *window_repaint_entry_point, D_StateDeltaHistory *hist); -internal void df_begin_frame(Arena *arena, D_CmdList *cmds); -internal void df_end_frame(void); internal void df_frame(D_CmdList *cmds, F32 dt); #endif // DBG_FRONTEND_CORE_H diff --git a/src/dbg_frontend/generated/dbg_frontend.meta.c b/src/dbg_frontend/generated/dbg_frontend.meta.c index 2db60f4b..95c2a309 100644 --- a/src/dbg_frontend/generated/dbg_frontend.meta.c +++ b/src/dbg_frontend/generated/dbg_frontend.meta.c @@ -4,7 +4,7 @@ //- GENERATED CODE C_LINKAGE_BEGIN -String8 df_msg_kind_name_lower_table[61] = +String8 df_msg_kind_name_lower_table[60] = { str8_lit_comp("null"), str8_lit_comp("exit"), @@ -14,7 +14,6 @@ str8_lit_comp("apply_user_data"), str8_lit_comp("apply_project_data"), str8_lit_comp("write_user_data"), str8_lit_comp("write_project_data"), -str8_lit_comp("error"), str8_lit_comp("open_window"), str8_lit_comp("close_window"), str8_lit_comp("toggle_fullscreen"), diff --git a/src/dbg_frontend/generated/dbg_frontend.meta.h b/src/dbg_frontend/generated/dbg_frontend.meta.h index f1cd33a6..288e0363 100644 --- a/src/dbg_frontend/generated/dbg_frontend.meta.h +++ b/src/dbg_frontend/generated/dbg_frontend.meta.h @@ -16,7 +16,6 @@ DF_MsgKind_ApplyUserData, DF_MsgKind_ApplyProjectData, DF_MsgKind_WriteUserData, DF_MsgKind_WriteProjectData, -DF_MsgKind_Error, DF_MsgKind_OpenWindow, DF_MsgKind_CloseWindow, DF_MsgKind_ToggleFullscreen, @@ -419,7 +418,7 @@ DF_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(no_addr); DF_VIEW_RULE_ROW_UI_FUNCTION_DEF(checkbox); DF_VIEW_RULE_ROW_UI_FUNCTION_DEF(color_rgba); C_LINKAGE_BEGIN -extern String8 df_msg_kind_name_lower_table[61]; +extern String8 df_msg_kind_name_lower_table[60]; extern DF_StringBindingPair df_g_default_binding_table[110]; extern String8 df_g_binding_version_remap_old_name_table[7]; extern String8 df_g_binding_version_remap_new_name_table[7];