float cfg from engine -> frontend; more elimination of dead code in engine

This commit is contained in:
Ryan Fleury
2024-09-11 15:40:11 -07:00
parent f4726eee0a
commit f59694fcfb
6 changed files with 108 additions and 180 deletions
+1 -31
View File
@@ -3396,12 +3396,6 @@ d_eval_string_from_file_path(Arena *arena, String8 string)
//- rjf: frame data
internal F32
d_dt(void)
{
return d_state->dt;
}
internal U64
d_frame_index(void)
{
@@ -3414,12 +3408,6 @@ d_frame_arena(void)
return d_state->frame_arenas[d_state->frame_index%ArrayCount(d_state->frame_arenas)];
}
internal F64
d_time_in_seconds(void)
{
return d_state->time_in_seconds;
}
//- rjf: interaction registers
internal D_Regs *
@@ -3478,22 +3466,6 @@ d_ctrl_targets_running(void)
return d_state->ctrl_is_running;
}
//- rjf: config paths
internal String8
d_cfg_path_from_src(D_CfgSrc src)
{
return d_state->cfg_paths[src];
}
//- rjf: config state
internal D_CfgTable *
d_cfg_table(void)
{
return &d_state->cfg_table;
}
//- rjf: config serialization
internal String8
@@ -4156,7 +4128,7 @@ d_init(void)
}
internal CTRL_EventList
d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_Scope *di_scope, F32 dt)
d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints)
{
ProfBeginFunction();
Temp scratch = scratch_begin(&arena, 1);
@@ -4164,8 +4136,6 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_
d_state->frame_index += 1;
arena_clear(d_frame_arena());
d_state->frame_eval_memread_endt_us = os_now_microseconds() + 5000;
d_state->dt = dt;
d_state->time_in_seconds += dt;
d_state->top_regs = &d_state->base_regs;
d_regs_copy_contents(d_frame_arena(), &d_state->top_regs->v, &d_state->top_regs->v);
+3 -87
View File
@@ -101,45 +101,6 @@ struct D_LineListArray
DI_KeyList dbgi_keys;
};
////////////////////////////////
//~ rjf: Sparse Tree Expansion State Data Structure
typedef struct D_ExpandKey D_ExpandKey;
struct D_ExpandKey
{
U64 parent_hash;
U64 child_num;
};
typedef struct D_ExpandNode D_ExpandNode;
struct D_ExpandNode
{
D_ExpandNode *hash_next;
D_ExpandNode *hash_prev;
D_ExpandNode *first;
D_ExpandNode *last;
D_ExpandNode *next;
D_ExpandNode *prev;
D_ExpandNode *parent;
D_ExpandKey key;
B32 expanded;
};
typedef struct D_ExpandSlot D_ExpandSlot;
struct D_ExpandSlot
{
D_ExpandNode *first;
D_ExpandNode *last;
};
typedef struct D_ExpandTreeTable D_ExpandTreeTable;
struct D_ExpandTreeTable
{
D_ExpandSlot *slots;
U64 slots_count;
D_ExpandNode *free_node;
};
////////////////////////////////
//~ rjf: Entity Kind Flags
@@ -190,33 +151,6 @@ typedef enum D_RunKind
}
D_RunKind;
////////////////////////////////
//~ rjf: View Rule Hook Types
typedef struct D_CfgTree D_CfgTree;
typedef struct D_CfgVal D_CfgVal;
typedef struct D_CfgTable D_CfgTable;
typedef struct D_EvalView D_EvalView;
typedef struct D_EvalVizBlockList D_EvalVizBlockList;
#define D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_SIG(name) E_Expr *name(Arena *arena, E_Expr *expr, MD_Node *params)
#define D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(name) d_core_view_rule_expr_resolution__##name
#define D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_DEF(name) internal D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_SIG(D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_NAME(name))
#define D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_SIG(name) void name(Arena *arena, \
D_EvalView *eval_view, \
D_ExpandKey parent_key, \
D_ExpandKey key, \
D_ExpandNode *expand_node, \
String8 string, \
E_Expr *expr, \
D_CfgTable *cfg_table, \
S32 depth, \
MD_Node *params, \
struct D_EvalVizBlockList *out)
#define D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(name) d_core_view_rule_viz_block_prod__##name
#define D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(name) internal D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_SIG(D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_NAME(name))
typedef D_VIEW_RULE_EXPR_RESOLUTION_FUNCTION_SIG(D_CoreViewRuleExprResolutionHookFunctionType);
typedef D_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_SIG(D_CoreViewRuleVizBlockProdHookFunctionType);
////////////////////////////////
//~ rjf: Generated Code
@@ -699,8 +633,6 @@ struct D_State
Arena *arena;
U64 frame_index;
U64 frame_eval_memread_endt_us;
F64 time_in_seconds;
F32 dt;
// rjf: frame info
Arena *frame_arenas[2];
@@ -755,7 +687,7 @@ struct D_State
U64 view_rule_spec_table_size;
D_ViewRuleSpec **view_rule_spec_table;
// rjf: control thread user -> ctrl driving state
// rjf: user -> ctrl driving state
Arena *ctrl_last_run_arena;
D_RunKind ctrl_last_run_kind;
U64 ctrl_last_run_frame_idx;
@@ -769,17 +701,10 @@ struct D_State
Arena *ctrl_msg_arena;
CTRL_MsgList ctrl_msgs;
// rjf: control thread ctrl -> user reading state
// rjf: ctrl -> user reading state
CTRL_EntityStore *ctrl_entity_store;
Arena *ctrl_stop_arena;
CTRL_Event ctrl_last_stop_event;
// rjf: config reading state
Arena *cfg_path_arenas[D_CfgSrc_COUNT];
String8 cfg_paths[D_CfgSrc_COUNT];
U64 cfg_cached_timestamp[D_CfgSrc_COUNT];
Arena *cfg_arena;
D_CfgTable cfg_table;
};
////////////////////////////////
@@ -789,7 +714,6 @@ read_only global D_CmdSpec d_nil_cmd_spec = {0};
read_only global D_ViewRuleSpec d_nil_core_view_rule_spec = {0};
read_only global D_CfgTree d_nil_cfg_tree = {&d_nil_cfg_tree, D_CfgSrc_User, &md_nil_node};
read_only global D_CfgVal d_nil_cfg_val = {&d_nil_cfg_val, &d_nil_cfg_val, &d_nil_cfg_tree, &d_nil_cfg_tree};
read_only global D_CfgTable d_nil_cfg_table = {0, 0, 0, &d_nil_cfg_val, &d_nil_cfg_val};
read_only global D_Entity d_nil_entity =
{
&d_nil_entity,
@@ -1084,10 +1008,8 @@ internal String8 d_eval_string_from_file_path(Arena *arena, String8 string);
//~ rjf: Main State Accessors/Mutators
//- rjf: frame data
internal F32 d_dt(void);
internal U64 d_frame_index(void);
internal Arena *d_frame_arena(void);
internal F64 d_time_in_seconds(void);
//- rjf: registers
internal D_Regs *d_regs(void);
@@ -1101,12 +1023,6 @@ internal D_RunKind d_ctrl_last_run_kind(void);
internal U64 d_ctrl_last_run_frame_idx(void);
internal B32 d_ctrl_targets_running(void);
//- rjf: config paths
internal String8 d_cfg_path_from_src(D_CfgSrc src);
//- rjf: config state
internal D_CfgTable *d_cfg_table(void);
//- rjf: config serialization
internal String8 d_cfg_escaped_from_raw_string(Arena *arena, String8 string);
internal String8 d_cfg_raw_from_escaped_string(Arena *arena, String8 string);
@@ -1148,6 +1064,6 @@ internal B32 d_next_cmd(D_Cmd **cmd);
//~ rjf: Main Layer Top-Level Calls
internal void d_init(void);
internal CTRL_EventList d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, DI_Scope *di_scope, F32 dt);
internal CTRL_EventList d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints);
#endif // DBG_ENGINE_CORE_H
+83 -57
View File
@@ -52,7 +52,7 @@ df_view_is_project_filtered(DF_View *view)
String8 view_project = view->project_path;
if(view_project.size != 0)
{
String8 current_project = d_cfg_path_from_src(D_CfgSrc_Project);
String8 current_project = df_cfg_path_from_src(D_CfgSrc_Project);
result = !path_match_normalized(view_project, current_project);
}
return result;
@@ -819,7 +819,7 @@ df_view_equip_spec(DF_View *view, DF_ViewSpec *spec, String8 query, MD_Node *par
if(spec->info.flags & DF_ViewSpecFlag_ProjectSpecific)
{
arena_clear(view->project_path_arena);
view->project_path = push_str8_copy(view->project_path_arena, d_cfg_path_from_src(D_CfgSrc_Project));
view->project_path = push_str8_copy(view->project_path_arena, df_cfg_path_from_src(D_CfgSrc_Project));
}
else
{
@@ -941,7 +941,7 @@ df_transient_view_node_from_ev_key(DF_View *owner_view, EV_Key key)
if(ev_key_match(n->key, key))
{
node = n;
n->last_frame_index_touched = d_frame_index();
n->last_frame_index_touched = df_state->frame_index;
break;
}
}
@@ -957,7 +957,7 @@ df_transient_view_node_from_ev_key(DF_View *owner_view, EV_Key key)
node->key = key;
node->view = df_view_alloc();
node->initial_params_arena = arena_alloc();
node->first_frame_index_touched = node->last_frame_index_touched = d_frame_index();
node->first_frame_index_touched = node->last_frame_index_touched = df_state->frame_index;
DLLPushBack_NPZ(&df_nil_view, owner_view->first_transient, owner_view->last_transient, node->view, order_next, order_prev);
}
return node;
@@ -1139,7 +1139,7 @@ df_window_frame(DF_Window *ws)
B32 hover_eval_is_open = (!confirm_open &&
ws->hover_eval_string.size != 0 &&
ws->hover_eval_first_frame_idx+20 < ws->hover_eval_last_frame_idx &&
d_frame_index()-ws->hover_eval_last_frame_idx < 20);
df_state->frame_index-ws->hover_eval_last_frame_idx < 20);
if(!window_is_focused || confirm_open)
{
ws->menu_bar_key_held = 0;
@@ -1371,7 +1371,7 @@ df_window_frame(DF_Window *ws)
}
// rjf: begin & push initial stack values
ui_begin_build(ws->os, &ws->ui_events, &icon_info, &widget_palette_info, &animation_info, d_dt(), d_dt());
ui_begin_build(ws->os, &ws->ui_events, &icon_info, &widget_palette_info, &animation_info, df_state->frame_dt, df_state->frame_dt);
ui_push_font(main_font);
ui_push_font_size(main_font_size);
ui_push_text_padding(main_font_size*0.3f);
@@ -1553,7 +1553,7 @@ df_window_frame(DF_Window *ws)
}
avg_ui_hash_chain_length = chain_length_sum / chain_count;
}
ui_labelf("Target Hz: %.2f", 1.f/d_dt());
ui_labelf("Target Hz: %.2f", 1.f/df_state->frame_dt);
ui_labelf("Ctrl Run Index: %I64u", ctrl_run_gen());
ui_labelf("Ctrl Mem Gen Index: %I64u", ctrl_mem_gen());
ui_labelf("Window %p", window);
@@ -2366,7 +2366,7 @@ df_window_frame(DF_Window *ws)
//- rjf: build auto-complete lister
//
ProfScope("build autocomplete lister")
if(!ws->autocomp_force_closed && !ui_key_match(ws->autocomp_root_key, ui_key_zero()) && ws->autocomp_last_frame_idx+1 >= d_frame_index())
if(!ws->autocomp_force_closed && !ui_key_match(ws->autocomp_root_key, ui_key_zero()) && ws->autocomp_last_frame_idx+1 >= df_state->frame_index)
{
String8 query = str8(ws->autocomp_lister_query_buffer, ws->autocomp_lister_query_size);
UI_Box *autocomp_root_box = ui_box_from_key(ws->autocomp_root_key);
@@ -2569,7 +2569,7 @@ df_window_frame(DF_Window *ws)
{
// rjf: animate target # of rows
{
F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? (1 - pow_f32(2, (-60.f * d_dt()))) : 1.f;
F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? (1 - pow_f32(2, (-60.f * df_state->frame_dt))) : 1.f;
F32 target = Min((F32)item_array.count, 16.f);
if(abs_f32(target - ws->autocomp_num_visible_rows_t) > 0.01f)
{
@@ -2584,7 +2584,7 @@ df_window_frame(DF_Window *ws)
// rjf: animate open
{
F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * d_dt())) : 1.f;
F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * df_state->frame_dt)) : 1.f;
F32 diff = 1.f-ws->autocomp_open_t;
ws->autocomp_open_t += diff*rate;
if(abs_f32(diff) < 0.05f)
@@ -3139,7 +3139,7 @@ df_window_frame(DF_Window *ws)
D_EntityList processes = d_query_cached_entity_list_with_kind(D_EntityKind_Process);
B32 have_targets = targets.count != 0;
B32 can_send_signal = !d_ctrl_targets_running();
B32 can_play = (have_targets && (can_send_signal || d_ctrl_last_run_frame_idx()+4 > d_frame_index()));
B32 can_play = (have_targets && (can_send_signal || d_ctrl_last_run_frame_idx()+4 > df_state->frame_index));
B32 can_pause = (!can_send_signal);
B32 can_stop = (processes.count != 0);
B32 can_step = (processes.count != 0 && can_send_signal);
@@ -3396,7 +3396,7 @@ df_window_frame(DF_Window *ws)
os_window_push_custom_title_bar_client_area(ws->os, user_box->rect);
UI_Parent(user_box) UI_PrefWidth(ui_text_dim(10, 0)) UI_TextAlignment(UI_TextAlign_Center)
{
String8 user_path = d_cfg_path_from_src(D_CfgSrc_User);
String8 user_path = df_cfg_path_from_src(D_CfgSrc_User);
user_path = str8_chop_last_dot(user_path);
DF_Font(DF_FontSlot_Icons)
UI_TextRasterFlags(df_raster_flags_from_slot(DF_FontSlot_Icons))
@@ -3430,7 +3430,7 @@ df_window_frame(DF_Window *ws)
os_window_push_custom_title_bar_client_area(ws->os, prof_box->rect);
UI_Parent(prof_box) UI_PrefWidth(ui_text_dim(10, 0)) UI_TextAlignment(UI_TextAlign_Center)
{
String8 prof_path = d_cfg_path_from_src(D_CfgSrc_Project);
String8 prof_path = df_cfg_path_from_src(D_CfgSrc_Project);
prof_path = str8_chop_last_dot(prof_path);
DF_Font(DF_FontSlot_Icons)
ui_label(df_g_icon_kind_text_table[DF_IconKind_Briefcase]);
@@ -3490,7 +3490,7 @@ df_window_frame(DF_Window *ws)
//
ProfScope("build bottom bar")
{
B32 is_running = d_ctrl_targets_running() && d_ctrl_last_run_frame_idx() < d_frame_index();
B32 is_running = d_ctrl_targets_running() && d_ctrl_last_run_frame_idx() < df_state->frame_index;
CTRL_Event stop_event = d_ctrl_last_stop_event();
UI_Palette *positive_scheme = df_palette_from_code(DF_PaletteCode_PositivePopButton);
UI_Palette *running_scheme = df_palette_from_code(DF_PaletteCode_NeutralPopButton);
@@ -3535,7 +3535,7 @@ df_window_frame(DF_Window *ws)
// rjf: developer frame-time indicator
if(DEV_updating_indicator)
{
F32 animation_t = pow_f32(sin_f32(d_time_in_seconds()/2.f), 2.f);
F32 animation_t = pow_f32(sin_f32(df_state->time_in_seconds/2.f), 2.f);
ui_spacer(ui_em(0.3f, 1.f));
ui_spacer(ui_em(1.5f*animation_t, 1.f));
UI_PrefWidth(ui_text_dim(10, 1)) ui_labelf("*");
@@ -3588,7 +3588,7 @@ df_window_frame(DF_Window *ws)
// rjf: error visualization
else if(ws->error_t >= 0.01f)
{
ws->error_t -= d_dt()/8.f;
ws->error_t -= df_state->frame_dt/8.f;
df_request_frame();
String8 error_string = str8(ws->error_buffer, ws->error_string_size);
if(error_string.size != 0)
@@ -3666,7 +3666,7 @@ df_window_frame(DF_Window *ws)
//- rjf: animate query info
//
{
F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * d_dt())) : 1.f;
F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * df_state->frame_dt)) : 1.f;
// rjf: animate query view selection transition
{
@@ -3878,7 +3878,7 @@ df_window_frame(DF_Window *ws)
abs_f32(view->scroll_pos.y.off) > 0.01f))
{
build_hover_eval = 0;
ws->hover_eval_first_frame_idx = d_frame_index();
ws->hover_eval_first_frame_idx = df_state->frame_index;
}
}
}
@@ -3891,7 +3891,7 @@ df_window_frame(DF_Window *ws)
}
// rjf: reset animation, but request frames if we're waiting to open
if(ws->hover_eval_string.size != 0 && !hover_eval_is_open && ws->hover_eval_last_frame_idx < ws->hover_eval_first_frame_idx+20 && d_frame_index()-ws->hover_eval_last_frame_idx < 50)
if(ws->hover_eval_string.size != 0 && !hover_eval_is_open && ws->hover_eval_last_frame_idx < ws->hover_eval_first_frame_idx+20 && df_state->frame_index-ws->hover_eval_last_frame_idx < 50)
{
df_request_frame();
ws->hover_eval_num_visible_rows_t = 0;
@@ -3940,7 +3940,7 @@ df_window_frame(DF_Window *ws)
{
// rjf: animate height
{
F32 fish_rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * d_dt())) : 1.f;
F32 fish_rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * df_state->frame_dt)) : 1.f;
F32 hover_eval_container_height_target = row_height * Min(30, viz_blocks.total_visual_row_count);
ws->hover_eval_num_visible_rows_t += (hover_eval_container_height_target - ws->hover_eval_num_visible_rows_t) * fish_rate;
if(abs_f32(hover_eval_container_height_target - ws->hover_eval_num_visible_rows_t) > 0.5f)
@@ -3955,7 +3955,7 @@ df_window_frame(DF_Window *ws)
// rjf: animate open
{
F32 fish_rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * d_dt())) : 1.f;
F32 fish_rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * df_state->frame_dt)) : 1.f;
F32 diff = 1.f - ws->hover_eval_open_t;
ws->hover_eval_open_t += diff*fish_rate;
if(abs_f32(diff) < 0.01f)
@@ -4181,9 +4181,9 @@ df_window_frame(DF_Window *ws)
UI_Signal hover_eval_sig = ui_signal_from_box(hover_eval_box);
if(ui_mouse_over(hover_eval_sig))
{
ws->hover_eval_last_frame_idx = d_frame_index();
ws->hover_eval_last_frame_idx = df_state->frame_index;
}
else if(ws->hover_eval_last_frame_idx+2 < d_frame_index())
else if(ws->hover_eval_last_frame_idx+2 < df_state->frame_index)
{
df_request_frame();
}
@@ -4483,7 +4483,7 @@ df_window_frame(DF_Window *ws)
//- rjf: animate panels
//
{
F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-50.f * d_dt())) : 1.f;
F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-50.f * df_state->frame_dt)) : 1.f;
Vec2F32 content_rect_dim = dim_2f32(content_rect);
for(DF_Panel *panel = ws->root_panel; !df_panel_is_nil(panel); panel = df_panel_rec_df_pre(panel).next)
{
@@ -5331,8 +5331,8 @@ df_window_frame(DF_Window *ws)
Task start_task = {0, &df_nil_panel, ws->query_view_stack_top};
Task *first_task = &start_task;
Task *last_task = first_task;
F32 rate = 1 - pow_f32(2, (-10.f * d_dt()));
F32 fast_rate = 1 - pow_f32(2, (-40.f * d_dt()));
F32 rate = 1 - pow_f32(2, (-10.f * df_state->frame_dt));
F32 fast_rate = 1 - pow_f32(2, (-40.f * df_state->frame_dt));
for(DF_Panel *panel = ws->root_panel;
!df_panel_is_nil(panel);
panel = df_panel_rec_df_pre(panel).next)
@@ -5457,7 +5457,7 @@ df_window_frame(DF_Window *ws)
//////////////////////////////
//- rjf: attach autocomp box to root, or hide if it has not been renewed
//
if(!ui_box_is_nil(autocomp_box) && ws->autocomp_last_frame_idx+1 >= d_frame_index()+1)
if(!ui_box_is_nil(autocomp_box) && ws->autocomp_last_frame_idx+1 >= df_state->frame_index+1)
{
UI_Box *autocomp_root_box = ui_box_from_key(ws->autocomp_root_key);
if(!ui_box_is_nil(autocomp_root_box))
@@ -5475,7 +5475,7 @@ df_window_frame(DF_Window *ws)
}
}
}
else if(!ui_box_is_nil(autocomp_box) && ws->autocomp_last_frame_idx+1 < d_frame_index()+1)
else if(!ui_box_is_nil(autocomp_box) && ws->autocomp_last_frame_idx+1 < df_state->frame_index+1)
{
UI_Box *autocomp_root_box = ui_box_from_key(ws->autocomp_root_key);
if(!ui_box_is_nil(autocomp_root_box))
@@ -5948,7 +5948,7 @@ df_window_frame(DF_Window *ws)
dr_fancy_string_list_push(scratch.arena, &strs, &str3);
DR_FancyRunList runs = dr_fancy_run_list_from_fancy_string_list(scratch.arena, 0, 0, &strs);
FNT_Run trailer_run = fnt_push_run_from_string(scratch.arena, df_font_from_slot(DF_FontSlot_Main), 16.f, 0, 0, 0, str8_lit("..."));
F32 limit = 500.f + sin_f32(d_time_in_seconds()/10.f)*200.f;
F32 limit = 500.f + sin_f32(df_state->time_in_seconds/10.f)*200.f;
dr_truncated_fancy_run_list(p, &runs, limit, trailer_run);
dr_rect(r2f32p(p.x+limit, 0, p.x+limit+2.f, 1000), v4f32(1, 0, 0, 1), 0, 0, 0);
df_request_frame();
@@ -6360,7 +6360,7 @@ internal void
df_set_hover_eval(Vec2F32 pos, String8 file_path, TxtPt pt, U64 vaddr, String8 string)
{
DF_Window *window = df_window_from_handle(d_regs()->window);
if(window->hover_eval_last_frame_idx+1 < d_frame_index() &&
if(window->hover_eval_last_frame_idx+1 < df_state->frame_index &&
ui_key_match(ui_active_key(UI_MouseButtonKind_Left), ui_key_zero()) &&
ui_key_match(ui_active_key(UI_MouseButtonKind_Middle), ui_key_zero()) &&
ui_key_match(ui_active_key(UI_MouseButtonKind_Right), ui_key_zero()))
@@ -6368,7 +6368,7 @@ df_set_hover_eval(Vec2F32 pos, String8 file_path, TxtPt pt, U64 vaddr, String8 s
B32 is_new_string = !str8_match(window->hover_eval_string, string, 0);
if(is_new_string)
{
window->hover_eval_first_frame_idx = window->hover_eval_last_frame_idx = d_frame_index();
window->hover_eval_first_frame_idx = window->hover_eval_last_frame_idx = df_state->frame_index;
arena_clear(window->hover_eval_arena);
window->hover_eval_string = push_str8_copy(window->hover_eval_arena, string);
window->hover_eval_file_path = push_str8_copy(window->hover_eval_arena, file_path);
@@ -6377,7 +6377,7 @@ df_set_hover_eval(Vec2F32 pos, String8 file_path, TxtPt pt, U64 vaddr, String8 s
window->hover_eval_focused = 0;
}
window->hover_eval_spawn_pos = pos;
window->hover_eval_last_frame_idx = d_frame_index();
window->hover_eval_last_frame_idx = df_state->frame_index;
}
}
@@ -6619,7 +6619,7 @@ df_set_autocomp_lister_query(UI_Key root_key, DF_AutoCompListerParams *params, S
window->autocomp_num_visible_rows_t = 0;
window->autocomp_open_t = 0;
}
if(window->autocomp_last_frame_idx+1 < d_frame_index())
if(window->autocomp_last_frame_idx+1 < df_state->frame_index)
{
window->autocomp_force_closed = 0;
window->autocomp_num_visible_rows_t = 0;
@@ -6631,7 +6631,7 @@ df_set_autocomp_lister_query(UI_Key root_key, DF_AutoCompListerParams *params, S
window->autocomp_lister_params.strings = str8_list_copy(window->autocomp_lister_params_arena, &window->autocomp_lister_params.strings);
window->autocomp_lister_query_size = Min(query.size, sizeof(window->autocomp_lister_query_buffer));
MemoryCopy(window->autocomp_lister_query_buffer, query.str, window->autocomp_lister_query_size);
window->autocomp_last_frame_idx = d_frame_index();
window->autocomp_last_frame_idx = df_state->frame_index;
}
////////////////////////////////
@@ -7423,12 +7423,30 @@ df_request_frame(void)
////////////////////////////////
//~ rjf: Main State Accessors
//- rjf: per-frame arena
internal Arena *
df_frame_arena(void)
{
return df_state->frame_arenas[df_state->frame_index%ArrayCount(df_state->frame_arenas)];
}
//- rjf: config paths
internal String8
df_cfg_path_from_src(D_CfgSrc src)
{
return df_state->cfg_paths[src];
}
//- rjf: config state
internal D_CfgTable *
df_cfg_table(void)
{
return &df_state->cfg_table;
}
////////////////////////////////
//~ rjf: Registers
@@ -7628,12 +7646,12 @@ df_init(CmdLine *cmdln)
String8 cfg_src_paths[D_CfgSrc_COUNT] = {user_cfg_path, project_cfg_path};
for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1))
{
d_state->cfg_path_arenas[src] = arena_alloc();
df_state->cfg_path_arenas[src] = arena_alloc();
df_cmd(d_cfg_src_load_cmd_kind_table[src], .file_path = path_normalized_from_string(scratch.arena, cfg_src_paths[src]));
}
// rjf: set up config table arena
d_state->cfg_arena = arena_alloc();
df_state->cfg_arena = arena_alloc();
scratch_end(scratch);
}
@@ -7723,6 +7741,13 @@ df_frame(void)
DI_Scope *di_scope = di_scope_open();
local_persist S32 depth = 0;
//////////////////////////////
//- rjf: do per-frame resets
//
arena_clear(df_frame_arena());
df_state->top_regs = &df_state->base_regs;
df_regs_copy_contents(df_frame_arena(), &df_state->top_regs->v, &df_state->top_regs->v);
//////////////////////////////
//- rjf: get events from the OS
//
@@ -7773,7 +7798,7 @@ df_frame(void)
//////////////////////////////
//- rjf: target Hz -> delta time
//
F32 dt = 1.f/target_hz;
df_state->frame_dt = 1.f/target_hz;
//////////////////////////////
//- rjf: begin measuring actual per-frame work
@@ -8152,7 +8177,7 @@ df_frame(void)
//- rjf: autosave if needed
//
{
df_state->seconds_until_autosave -= dt;
df_state->seconds_until_autosave -= df_state->frame_dt;
if(df_state->seconds_until_autosave <= 0.f)
{
df_cmd(DF_CmdKind_WriteUserData);
@@ -8412,8 +8437,8 @@ df_frame(void)
{
if(load_cfg[src])
{
arena_clear(d_state->cfg_path_arenas[src]);
d_state->cfg_paths[src] = push_str8_copy(d_state->cfg_path_arenas[src], new_path);
arena_clear(df_state->cfg_path_arenas[src]);
df_state->cfg_paths[src] = push_str8_copy(df_state->cfg_path_arenas[src], new_path);
}
}
}
@@ -8424,7 +8449,7 @@ df_frame(void)
{
for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1))
{
String8 path = d_cfg_path_from_src(src);
String8 path = df_cfg_path_from_src(src);
cfg_props[src] = os_properties_from_file_path(path);
}
}
@@ -8436,7 +8461,7 @@ df_frame(void)
{
for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1))
{
String8 path = d_cfg_path_from_src(src);
String8 path = df_cfg_path_from_src(src);
OS_Handle file = os_file_open(OS_AccessFlag_ShareRead|OS_AccessFlag_Read, path);
FileProperties props = os_properties_from_file(file);
String8 data = os_string_from_file_range(scratch.arena, file, r1u64(0, props.size));
@@ -8466,7 +8491,7 @@ df_frame(void)
{
for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1))
{
cfg_load[src] = (load_cfg[src] && ((cfg_save[src] == 0 && d_state->cfg_cached_timestamp[src] != cfg_timestamps[src]) || cfg_props[src].created == 0));
cfg_load[src] = (load_cfg[src] && ((cfg_save[src] == 0 && df_state->cfg_cached_timestamp[src] != cfg_timestamps[src]) || cfg_props[src].created == 0));
cfg_load_any = cfg_load_any || cfg_load[src];
}
}
@@ -8474,11 +8499,11 @@ df_frame(void)
//- rjf: load => build new config table
if(cfg_load_any)
{
arena_clear(d_state->cfg_arena);
MemoryZeroStruct(&d_state->cfg_table);
arena_clear(df_state->cfg_arena);
MemoryZeroStruct(&df_state->cfg_table);
for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1))
{
d_cfg_table_push_unparsed_string(d_state->cfg_arena, &d_state->cfg_table, cfg_data[src], src);
d_cfg_table_push_unparsed_string(df_state->cfg_arena, &df_state->cfg_table, cfg_data[src], src);
}
}
@@ -8496,7 +8521,7 @@ df_frame(void)
D_CmdKind cmd_kind = d_cfg_src_apply_cmd_kind_table[src];
D_CmdParams params = d_cmd_params_zero();
df_push_cmd(df_cmd_spec_from_kind(cmd_kind), &params);
d_state->cfg_cached_timestamp[src] = cfg_timestamps[src];
df_state->cfg_cached_timestamp[src] = cfg_timestamps[src];
}
}
}
@@ -8526,7 +8551,7 @@ df_frame(void)
case DF_CmdKind_ApplyUserData:
case DF_CmdKind_ApplyProjectData:
{
D_CfgTable *table = d_cfg_table();
D_CfgTable *table = df_cfg_table();
OS_HandleArray monitors = os_push_monitors_array(scratch.arena);
//- rjf: get config source
@@ -8541,7 +8566,7 @@ df_frame(void)
}
//- rjf: get paths
String8 cfg_path = d_cfg_path_from_src(src);
String8 cfg_path = df_cfg_path_from_src(src);
String8 cfg_folder = str8_chop_last_slash(cfg_path);
//- rjf: keep track of recent projects
@@ -9246,7 +9271,7 @@ df_frame(void)
try_u64_from_str8_c_rules(hex_string, &hex_val);
Vec4F32 color_rgba = rgba_from_u32((U32)hex_val);
df_state->cfg_theme_target.colors[color_code] = color_rgba;
if(d_frame_index() <= 2)
if(df_state->frame_index <= 2)
{
df_state->cfg_theme.colors[color_code] = color_rgba;
}
@@ -9404,7 +9429,7 @@ df_frame(void)
break;
}
}
String8 path = d_cfg_path_from_src(src);
String8 path = df_cfg_path_from_src(src);
String8List d_strs = d_cfg_strings_from_core(scratch.arena, path, src);
String8List df_strs = df_cfg_strings_from_gfx(scratch.arena, path, src);
String8 header = push_str8f(scratch.arena, "// raddbg %s file\n\n", d_cfg_src_string_table[src].str);
@@ -10492,7 +10517,7 @@ df_frame(void)
for(D_CfgSrc src = (D_CfgSrc)0; src < D_CfgSrc_COUNT; src = (D_CfgSrc)(src+1))
{
DF_CmdKind write_cmd = d_cfg_src_write_cmd_kind_table[src];
df_cmd(write_cmd, .file_path = d_cfg_path_from_src(src));
df_cmd(write_cmd, .file_path = df_cfg_path_from_src(src));
}
}break;
@@ -12056,7 +12081,7 @@ df_frame(void)
//////////////////////////////
//- rjf: tick debug engine
//
d_tick(scratch.arena, &targets, &breakpoints, di_scope, dt);
d_tick(scratch.arena, &targets, &breakpoints);
//////////////////////////////
//- rjf: apply new rich hover info
@@ -12071,7 +12096,7 @@ df_frame(void)
//- rjf: animate confirmation
//
{
F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-10.f * d_dt())) : 1.f;
F32 rate = df_setting_val_from_code(DF_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-10.f * df_state->frame_dt)) : 1.f;
B32 confirm_open = df_state->confirm_active;
df_state->confirm_t += rate * ((F32)!!confirm_open-df_state->confirm_t);
if(abs_f32(df_state->confirm_t - (F32)!!confirm_open) > 0.005f)
@@ -12086,7 +12111,7 @@ df_frame(void)
{
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()));
F32 rate = 1 - pow_f32(2, (-50.f * df_state->frame_dt));
for(DF_ThemeColor color = DF_ThemeColor_Null;
color < DF_ThemeColor_COUNT;
color = (DF_ThemeColor)(color+1))
@@ -12109,7 +12134,7 @@ df_frame(void)
//- rjf: animate alive-transitions for entities
//
{
F32 rate = 1.f - pow_f32(2.f, -20.f*d_dt());
F32 rate = 1.f - pow_f32(2.f, -20.f*df_state->frame_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);
@@ -12242,9 +12267,10 @@ df_frame(void)
df_state->frame_time_us_history[df_state->frame_index%ArrayCount(df_state->frame_time_us_history)] = frame_time_us;
//////////////////////////////
//- rjf: bump frame index
//- rjf: bump frame time counters
//
df_state->frame_index += 1;
df_state->time_in_seconds += df_state->frame_dt;
di_scope_close(di_scope);
scratch_end(scratch);
+16
View File
@@ -654,8 +654,10 @@ struct DF_State
// rjf: top-level state
Arena *arena;
B32 quit;
F64 time_in_seconds;
// rjf: frame state
F32 frame_dt;
U64 frame_index;
Arena *frame_arenas[2];
@@ -746,6 +748,13 @@ struct DF_State
DF_RichHoverInfo rich_hover_info_next;
DF_RichHoverInfo rich_hover_info_current;
// rjf: config reading state
Arena *cfg_path_arenas[D_CfgSrc_COUNT];
String8 cfg_paths[D_CfgSrc_COUNT];
U64 cfg_cached_timestamp[D_CfgSrc_COUNT];
Arena *cfg_arena;
D_CfgTable cfg_table;
// rjf: running theme state
DF_Theme cfg_theme_target;
DF_Theme cfg_theme;
@@ -1025,8 +1034,15 @@ internal void df_request_frame(void);
////////////////////////////////
//~ rjf: Main State Accessors
//- rjf: per-frame arena
internal Arena *df_frame_arena(void);
//- rjf: config paths
internal String8 df_cfg_path_from_src(D_CfgSrc src);
//- rjf: config state
internal D_CfgTable *df_cfg_table(void);
////////////////////////////////
//~ rjf: Registers
+2 -2
View File
@@ -8306,8 +8306,8 @@ DF_VIEW_UI_FUNCTION_DEF(geo3d)
//- rjf: animate camera
//
{
F32 fast_rate = 1 - pow_f32(2, (-60.f * d_dt()));
F32 slow_rate = 1 - pow_f32(2, (-30.f * d_dt()));
F32 fast_rate = 1 - pow_f32(2, (-60.f * df_state->frame_dt));
F32 slow_rate = 1 - pow_f32(2, (-30.f * df_state->frame_dt));
state->zoom += (zoom_target - state->zoom) * slow_rate;
state->yaw += (yaw_target - state->yaw) * fast_rate;
state->pitch += (pitch_target - state->pitch) * fast_rate;
+3 -3
View File
@@ -15,7 +15,7 @@ df_loading_overlay(Rng2F32 rect, F32 loading_t, U64 progress_v, U64 progress_v_t
F32 height = ui_top_font_size() * 1.f;
F32 min_thickness = ui_top_font_size()/2;
F32 trail = ui_top_font_size() * 4;
F32 t = pow_f32(sin_f32((F32)d_time_in_seconds() / 1.8f), 2.f);
F32 t = pow_f32(sin_f32((F32)df_state->time_in_seconds / 1.8f), 2.f);
F64 v = 1.f - abs_f32(0.5f - t);
// rjf: colors
@@ -1073,7 +1073,7 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
{
color = d_rgba_from_entity(thread);
}
if(d_ctrl_targets_running() && d_ctrl_last_run_frame_idx() < d_frame_index())
if(d_ctrl_targets_running() && d_ctrl_last_run_frame_idx() < df_state->frame_index)
{
color.w *= 0.5f;
}
@@ -1232,7 +1232,7 @@ df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
{
color = d_rgba_from_entity(thread);
}
if(d_ctrl_targets_running() && d_ctrl_last_run_frame_idx() < d_frame_index())
if(d_ctrl_targets_running() && d_ctrl_last_run_frame_idx() < df_state->frame_index)
{
color.w *= 0.5f;
}