diff --git a/src/df/gfx/df_gfx.c b/src/df/gfx/df_gfx.c index d1a4109a..066cf42c 100644 --- a/src/df/gfx/df_gfx.c +++ b/src/df/gfx/df_gfx.c @@ -9810,7 +9810,7 @@ df_loading_overlay(Rng2F32 rect, F32 loading_t, U64 progress_v, U64 progress_v_t F64 v = 1.f - abs_f32(0.5f - t); // rjf: colors - Vec4F32 bg_color = df_rgba_from_theme_color(DF_ThemeColor_FloatingBackground); + Vec4F32 bg_color = df_rgba_from_theme_color(DF_ThemeColor_BaseBackground); Vec4F32 bd_color = df_rgba_from_theme_color(DF_ThemeColor_FloatingBorder); Vec4F32 hl_color = df_rgba_from_theme_color(DF_ThemeColor_TextNeutral); bg_color.w *= loading_t; diff --git a/src/df/gfx/df_gfx.mdesk b/src/df/gfx/df_gfx.mdesk index 6678165f..4f18d353 100644 --- a/src/df/gfx/df_gfx.mdesk +++ b/src/df/gfx/df_gfx.mdesk @@ -252,10 +252,11 @@ DF_GfxViewTable: //- rjf: visualizers { Code "code" "Code" FileOutline 0 1 1 0 1 0 0 "" } - { Disassembly "disassembly" "Disassembly" Glasses 0 0 1 0 0 0 1 "Displays disassembled instructions in a textual form from the selected thread's containing process virtual address space." } - { Output "output" "Output" List 0 0 1 0 0 0 1 "Displays textual output from the selected thread's containing process." } - { Memory "memory" "Memory" Grid 0 0 1 0 0 0 1 "A familiar hex-editor-like interface for viewing memory of attached processes." } + { Disassembly "disassembly" "Disassembly" Glasses 0 0 1 0 1 0 1 "Displays disassembled instructions in a textual form from the selected thread's containing process virtual address space." } + { Output "output" "Output" List 0 0 1 0 0 0 1 "Displays debug strings, output from attached processes." } + { Memory "memory" "Memory" Grid 0 0 1 0 1 0 1 "A hex-editor-like grid interface for viewing memory." } { Bitmap "bitmap" "Bitmap" Binoculars 0 0 1 0 1 0 1 "Visualizes memory as a bitmap." } + { ColorRGBA "color_rgba" "Color (RGBA)" Palette 0 0 1 0 1 0 1 "Visualizes memory as an RGBA color." } //- rjf: meta (settings) { ExceptionFilters "exception_filters" "Exception Filters" Gear 0 0 1 1 0 1 1 "An interface which controls whether or not the debugger will halt attached processes upon encountering specific exception codes for the first time." } @@ -328,7 +329,7 @@ DF_GfxViewRuleTable: {"omit" x x - - "" } {"no_addr" - x - - "" } {"checkbox" - - x - "" } - {"rgba" - - x x "" } + {"rgba" - - x x "color_rgba" } {"text" - - - x "code" } {"disasm" - - - x "disassembly" } {"memory" - - - x "memory" } diff --git a/src/df/gfx/df_view_rules.c b/src/df/gfx/df_view_rules.c index fc31b3dd..5ab501a7 100644 --- a/src/df/gfx/df_view_rules.c +++ b/src/df/gfx/df_view_rules.c @@ -345,199 +345,6 @@ DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(checkbox) //////////////////////////////// //~ rjf: "rgba" -internal Vec4F32 -df_vr_rgba_from_eval(E_Eval eval, DF_Entity *process) -{ - Vec4F32 rgba = {0}; - Temp scratch = scratch_begin(0, 0); - E_TypeKey type_key = eval.type_key; - E_TypeKind type_kind = e_type_kind_from_key(type_key); - switch(type_kind) - { - default:{}break; - - // rjf: extract r/g/b/a bytes from u32 - case E_TypeKind_U32: - case E_TypeKind_S32: - { - U32 hex_val = (U32)eval.value.u64; - rgba = rgba_from_u32(hex_val); - }break; - - // rjf: extract r/g/b/a values from array - case E_TypeKind_Array: - if(eval.mode == E_Mode_Offset) - { - U64 array_total_size = e_type_byte_size_from_key(type_key); - U64 array_total_size_capped = ClampTop(array_total_size, 64); - Rng1U64 array_memory_vaddr_rng = r1u64(eval.value.u64, eval.value.u64 + array_total_size_capped); - CTRL_ProcessMemorySlice array_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, array_memory_vaddr_rng, 0); - String8 array_memory = array_slice.data; - E_TypeKey element_type_key = e_type_unwrap(e_type_direct_from_key(e_type_unwrap(type_key))); - E_TypeKind element_type_kind = e_type_kind_from_key(element_type_key); - U64 element_type_size = e_type_byte_size_from_key(element_type_key); - for(U64 element_idx = 0; element_idx < 4; element_idx += 1) - { - U64 offset = element_idx*element_type_size; - if(offset >= array_memory.size) - { - break; - } - switch(element_type_kind) - { - default:{}break; - case E_TypeKind_U8: - { - U8 byte = array_memory.str[offset]; - rgba.v[element_idx] = byte/255.f; - }break; - case E_TypeKind_F32: - { - rgba.v[element_idx] = *(F32 *)(array_memory.str+offset); - }break; - } - } - }break; - - // rjf: extract r/g/b/a values from struct - case E_TypeKind_Struct: - case E_TypeKind_Class: - case E_TypeKind_Union: - if(eval.mode == E_Mode_Offset) - { - U64 struct_total_size = e_type_byte_size_from_key(type_key); - U64 struct_total_size_capped = ClampTop(struct_total_size, 64); - Rng1U64 struct_memory_vaddr_rng = r1u64(eval.value.u64, eval.value.u64 + struct_total_size_capped); - CTRL_ProcessMemorySlice struct_slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, struct_memory_vaddr_rng, 0); - String8 struct_memory = struct_slice.data; - E_Type *type = e_type_from_key(scratch.arena, type_key); - for(U64 element_idx = 0, member_idx = 0; - element_idx < 4 && member_idx < type->count; - member_idx += 1) - { - E_Member *member = &type->members[member_idx]; - E_TypeKey member_type_key = member->type_key; - E_TypeKind member_type_kind = e_type_kind_from_key(member_type_key); - B32 member_is_component = 1; - switch(member_type_kind) - { - default:{member_is_component = 0;}break; - case E_TypeKind_U8: - { - rgba.v[element_idx] = struct_memory.str[member->off]/255.f; - }break; - case E_TypeKind_F32: - { - rgba.v[element_idx] = *(F32 *)(struct_memory.str + member->off); - }break; - } - if(member_is_component) - { - element_idx += 1; - } - } - }break; - } - scratch_end(scratch); - return rgba; -} - -internal void -df_vr_eval_commit_rgba(E_Eval eval, Vec4F32 rgba) -{ - E_TypeKey type_key = eval.type_key; - E_TypeKind type_kind = e_type_kind_from_key(type_key); - switch(type_kind) - { - default:{}break; - - // rjf: extract r/g/b/a bytes from u32 - case E_TypeKind_U32: - case E_TypeKind_S32: - { - U32 val = u32_from_rgba(rgba); - E_Eval src_eval = eval; - src_eval.mode = E_Mode_Value; - src_eval.value.u64 = (U64)val; - // TODO(rjf): df_commit_eval_value(eval, src_eval); - }break; - -#if 0 - // rjf: extract r/g/b/a values from array - case E_TypeKind_Array: - if(eval.mode == E_Mode_Addr) - { - U64 array_total_size = e_type_byte_size_from_key(type_key); - U64 array_total_size_capped = ClampTop(array_total_size, 64); - Rng1U64 array_memory_vaddr_rng = r1u64(eval.offset, eval.offset + array_total_size_capped); - String8 array_memory = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, array_memory_vaddr_rng); - E_TypeKey element_type_key = e_type_unwrap(e_type_direct_from_key(e_type_unwrap(type_key))); - E_TypeKind element_type_kind = e_type_kind_from_key(element_type_key); - U64 element_type_size = e_type_byte_size_from_key(element_type_key); - for(U64 element_idx = 0; element_idx < 4; element_idx += 1) - { - U64 offset = element_idx*element_type_size; - if(offset >= array_memory.size) - { - break; - } - switch(element_type_kind) - { - default:{}break; - case E_TypeKind_U8: - { - U8 byte = array_memory.str[offset]; - rgba.v[element_idx] = byte/255.f; - }break; - case E_TypeKind_F32: - { - rgba.v[element_idx] = *(F32 *)(array_memory.str+offset); - }break; - } - } - }break; - - // rjf: extract r/g/b/a values from struct - case E_TypeKind_Struct: - case E_TypeKind_Class: - case E_TypeKind_Union: - if(eval.mode == E_Mode_Addr) - { - U64 struct_total_size = e_type_byte_size_from_key(type_key); - U64 struct_total_size_capped = ClampTop(struct_total_size, 64); - Rng1U64 struct_memory_vaddr_rng = r1u64(eval.offset, eval.offset + struct_total_size_capped); - String8 struct_memory = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, process->ctrl_machine_id, process->ctrl_handle, struct_memory_vaddr_rng); - E_Type *type = e_type_from_key(scratch.arena, graph, raddbg, type_key); - for(U64 element_idx = 0, member_idx = 0; - element_idx < 4 && member_idx < type->count; - member_idx += 1) - { - E_Member *member = &type->members[member_idx]; - E_TypeKey member_type_key = member->type_key; - E_TypeKind member_type_kind = e_type_kind_from_key(member_type_key); - B32 member_is_component = 1; - switch(member_type_kind) - { - default:{member_is_component = 0;}break; - case E_TypeKind_U8: - { - rgba.v[element_idx] = struct_memory.str[member->off]/255.f; - }break; - case E_TypeKind_F32: - { - rgba.v[element_idx] = *(F32 *)(struct_memory.str + member->off); - }break; - } - if(member_is_component) - { - element_idx += 1; - } - } - }break; -#endif - } -} - DF_CORE_VIEW_RULE_VIZ_BLOCK_PROD_FUNCTION_DEF(rgba) { DF_EvalVizBlock *vb = df_eval_viz_block_begin(arena, DF_EvalVizBlockKind_Canvas, key, df_expand_key_make(df_hash_from_expand_key(key), 1), depth); @@ -557,7 +364,7 @@ DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(rgba) //- rjf: grab hsva E_Eval value_eval = e_value_eval_from_eval(eval); - Vec4F32 rgba = df_vr_rgba_from_eval(value_eval, process); + Vec4F32 rgba = df_rgba_from_eval_params(value_eval, params); Vec4F32 hsva = hsva_from_rgba(rgba); //- rjf: build text box @@ -612,87 +419,6 @@ DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_DEF(rgba) scratch_end(scratch); } -#if 0 -DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(rgba) -{ - Temp scratch = scratch_begin(0, 0); - DF_Entity *thread = df_entity_from_handle(df_interact_regs()->thread); - DF_Entity *process = df_entity_ancestor_from_kind(thread, DF_EntityKind_Process); - DF_VR_RGBAState *state = df_view_rule_block_user_state(key, DF_VR_RGBAState); - - //- rjf: grab hsva - Vec4F32 rgba = {0}; - Vec4F32 hsva = {0}; - { - if(state->memgen_idx >= ctrl_mem_gen()) - { - hsva = state->hsva; - rgba = rgba_from_hsva(hsva); - } - else - { - E_Eval value_eval = e_value_eval_from_eval(eval); - rgba = df_vr_rgba_from_eval(value_eval, process); - state->hsva = hsva = hsva_from_rgba(rgba); - state->memgen_idx = ctrl_mem_gen(); - } - } - Vec4F32 initial_hsva = hsva; - - //- rjf: build color picker - B32 commit = 0; - UI_Padding(ui_pct(1.f, 0.f)) - { - UI_PrefWidth(ui_px(dim.y, 1.f)) - { - UI_Signal sv_sig = ui_sat_val_pickerf(hsva.x, &hsva.y, &hsva.z, "sat_val_picker"); - commit = commit || ui_released(sv_sig); - } - UI_PrefWidth(ui_em(3.f, 1.f)) - { - UI_Signal h_sig = ui_hue_pickerf(&hsva.x, hsva.y, hsva.z, "hue_picker"); - commit = commit || ui_released(h_sig); - } - UI_PrefWidth(ui_children_sum(1)) UI_Column UI_PrefWidth(ui_text_dim(10, 1)) DF_Font(ws, DF_FontSlot_Code) UI_FlagsAdd(UI_BoxFlag_DrawTextWeak) - { - ui_labelf("Hex"); - ui_labelf("R"); - ui_labelf("G"); - ui_labelf("B"); - ui_labelf("H"); - ui_labelf("S"); - ui_labelf("V"); - ui_labelf("A"); - } - UI_PrefWidth(ui_children_sum(1)) UI_Column UI_PrefWidth(ui_text_dim(10, 1)) DF_Font(ws, DF_FontSlot_Code) - { - String8 hex_string = hex_string_from_rgba_4f32(scratch.arena, rgba); - ui_label(hex_string); - ui_labelf("%.2f", rgba.x); - ui_labelf("%.2f", rgba.y); - ui_labelf("%.2f", rgba.z); - ui_labelf("%.2f", hsva.x); - ui_labelf("%.2f", hsva.y); - ui_labelf("%.2f", hsva.z); - ui_labelf("%.2f", rgba.w); - } - } - - //- rjf: commit edited hsva back - if(commit) - { - Vec4F32 rgba = rgba_from_hsva(hsva); - df_vr_eval_commit_rgba(eval, rgba); - state->memgen_idx = ctrl_mem_gen(); - } - - //- rjf: commit possible edited value to state - state->hsva = hsva; - - scratch_end(scratch); -} -#endif - //////////////////////////////// //~ rjf: "text" diff --git a/src/df/gfx/df_view_rules.h b/src/df/gfx/df_view_rules.h index 6e68e08e..2ef86e0c 100644 --- a/src/df/gfx/df_view_rules.h +++ b/src/df/gfx/df_view_rules.h @@ -14,7 +14,6 @@ struct DF_VR_RGBAState U64 memgen_idx; }; -internal Vec4F32 df_vr_rgba_from_eval(E_Eval eval, DF_Entity *process); internal void df_vr_eval_commit_rgba(E_Eval eval, Vec4F32 rgba); //////////////////////////////// diff --git a/src/df/gfx/df_views.c b/src/df/gfx/df_views.c index a2d63a20..d9dce6fb 100644 --- a/src/df/gfx/df_views.c +++ b/src/df/gfx/df_views.c @@ -3346,6 +3346,31 @@ df_bitmap_canvas_from_screen_rect(Vec2F32 view_center_pos, F32 zoom, Rng2F32 rec return cvs; } +//////////////////////////////// +//~ rjf: Color RGBA Views + +internal Vec4F32 +df_rgba_from_eval_params(E_Eval eval, MD_Node *params) +{ + Vec4F32 rgba = {0}; + { + E_Eval value_eval = e_value_eval_from_eval(eval); + E_TypeKey type_key = eval.type_key; + E_TypeKind type_kind = e_type_kind_from_key(type_key); + U64 type_size = e_type_byte_size_from_key(type_key); + if(16 <= type_size) + { + e_space_read(eval.space, &rgba, r1u64(eval.value.u64, eval.value.u64 + 16)); + } + else if(4 <= type_size) + { + U32 hex_val = value_eval.value.u32; + rgba = rgba_from_u32(hex_val); + } + } + return rgba; +} + //////////////////////////////// //~ rjf: Null @view_hook_impl @@ -8366,6 +8391,56 @@ DF_VIEW_UI_FUNCTION_DEF(Bitmap) scratch_end(scratch); } +//////////////////////////////// +//~ rjf: Color @view_hook_impl + +DF_VIEW_SETUP_FUNCTION_DEF(ColorRGBA) {} +DF_VIEW_CMD_FUNCTION_DEF(ColorRGBA) {} +DF_VIEW_UI_FUNCTION_DEF(ColorRGBA) +{ + Temp scratch = scratch_begin(0, 0); + Vec2F32 dim = dim_2f32(rect); + F32 padding = ui_top_font_size()*3.f; + E_Eval eval = e_eval_from_string(scratch.arena, string); + Vec4F32 rgba = df_rgba_from_eval_params(eval, params); + Vec4F32 hsva = hsva_from_rgba(rgba); + UI_WidthFill UI_HeightFill UI_Column UI_Padding(ui_px(padding, 1.f)) UI_Row UI_Padding(ui_pct(1.f, 0.f)) UI_HeightFill + { + UI_PrefWidth(ui_px(dim.y - padding*2, 1.f)) + { + UI_Signal sv_sig = ui_sat_val_pickerf(hsva.x, &hsva.y, &hsva.z, "sat_val_picker"); + } + UI_PrefWidth(ui_em(3.f, 1.f)) + { + UI_Signal h_sig = ui_hue_pickerf(&hsva.x, hsva.y, hsva.z, "hue_picker"); + } + UI_PrefWidth(ui_children_sum(1)) UI_Column UI_PrefWidth(ui_text_dim(10, 1)) UI_PrefHeight(ui_em(2.f, 0.f)) DF_Font(ws, DF_FontSlot_Code) UI_FlagsAdd(UI_BoxFlag_DrawTextWeak) + { + ui_labelf("Hex"); + ui_labelf("R"); + ui_labelf("G"); + ui_labelf("B"); + ui_labelf("H"); + ui_labelf("S"); + ui_labelf("V"); + ui_labelf("A"); + } + UI_PrefWidth(ui_children_sum(1)) UI_Column UI_PrefWidth(ui_text_dim(10, 1)) UI_PrefHeight(ui_em(2.f, 0.f)) DF_Font(ws, DF_FontSlot_Code) + { + String8 hex_string = hex_string_from_rgba_4f32(scratch.arena, rgba); + ui_label(hex_string); + ui_labelf("%.2f", rgba.x); + ui_labelf("%.2f", rgba.y); + ui_labelf("%.2f", rgba.z); + ui_labelf("%.2f", hsva.x); + ui_labelf("%.2f", hsva.y); + ui_labelf("%.2f", hsva.z); + ui_labelf("%.2f", rgba.w); + } + } + scratch_end(scratch); +} + //////////////////////////////// //~ rjf: ExceptionFilters @view_hook_impl diff --git a/src/df/gfx/df_views.h b/src/df/gfx/df_views.h index e9a41a09..2a892aa9 100644 --- a/src/df/gfx/df_views.h +++ b/src/df/gfx/df_views.h @@ -587,4 +587,9 @@ internal Rng2F32 df_bitmap_screen_from_canvas_rect(Vec2F32 view_center_pos, F32 internal Vec2F32 df_bitmap_canvas_from_screen_pos(Vec2F32 view_center_pos, F32 zoom, Rng2F32 rect, Vec2F32 scr); internal Rng2F32 df_bitmap_canvas_from_screen_rect(Vec2F32 view_center_pos, F32 zoom, Rng2F32 rect, Rng2F32 scr); +//////////////////////////////// +//~ rjf: Color RGBA Views + +internal Vec4F32 df_rgba_from_eval_params(E_Eval eval, MD_Node *params); + #endif // DEBUG_FRONTEND_VIEWS_H diff --git a/src/df/gfx/generated/df_gfx.meta.c b/src/df/gfx/generated/df_gfx.meta.c index 518aa827..337070b5 100644 --- a/src/df/gfx/generated/df_gfx.meta.c +++ b/src/df/gfx/generated/df_gfx.meta.c @@ -140,7 +140,7 @@ str8_lit_comp("add_address_breakpoint"), str8_lit_comp("add_function_breakpoint"), }; -DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[32] = +DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[33] = { {(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("null"), str8_lit_comp(""), DF_IconKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Null), DF_VIEW_CMD_FUNCTION_NAME(Null), DF_VIEW_UI_FUNCTION_NAME(Null)}, {(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("empty"), str8_lit_comp(""), DF_IconKind_Null, DF_VIEW_SETUP_FUNCTION_NAME(Empty), DF_VIEW_CMD_FUNCTION_NAME(Empty), DF_VIEW_UI_FUNCTION_NAME(Empty)}, @@ -168,10 +168,11 @@ DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[32] = {(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|1*DF_ViewSpecFlag_CanFilter|1*DF_ViewSpecFlag_FilterIsCode|1*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("procedures"), str8_lit_comp("Procedures"), DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(Procedures), DF_VIEW_CMD_FUNCTION_NAME(Procedures), DF_VIEW_UI_FUNCTION_NAME(Procedures)}, {(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|0*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("pending_file"), str8_lit_comp("Pending File"), DF_IconKind_FileOutline, DF_VIEW_SETUP_FUNCTION_NAME(PendingFile), DF_VIEW_CMD_FUNCTION_NAME(PendingFile), DF_VIEW_UI_FUNCTION_NAME(PendingFile)}, {(0|0*DF_ViewSpecFlag_ParameterizedByEntity|1*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|1*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("code"), str8_lit_comp("Code"), DF_IconKind_FileOutline, DF_VIEW_SETUP_FUNCTION_NAME(Code), DF_VIEW_CMD_FUNCTION_NAME(Code), DF_VIEW_UI_FUNCTION_NAME(Code)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("disassembly"), str8_lit_comp("Disassembly"), DF_IconKind_Glasses, DF_VIEW_SETUP_FUNCTION_NAME(Disassembly), DF_VIEW_CMD_FUNCTION_NAME(Disassembly), DF_VIEW_UI_FUNCTION_NAME(Disassembly)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|1*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("disassembly"), str8_lit_comp("Disassembly"), DF_IconKind_Glasses, DF_VIEW_SETUP_FUNCTION_NAME(Disassembly), DF_VIEW_CMD_FUNCTION_NAME(Disassembly), DF_VIEW_UI_FUNCTION_NAME(Disassembly)}, {(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("output"), str8_lit_comp("Output"), DF_IconKind_List, DF_VIEW_SETUP_FUNCTION_NAME(Output), DF_VIEW_CMD_FUNCTION_NAME(Output), DF_VIEW_UI_FUNCTION_NAME(Output)}, -{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("memory"), str8_lit_comp("Memory"), DF_IconKind_Grid, DF_VIEW_SETUP_FUNCTION_NAME(Memory), DF_VIEW_CMD_FUNCTION_NAME(Memory), DF_VIEW_UI_FUNCTION_NAME(Memory)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|1*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("memory"), str8_lit_comp("Memory"), DF_IconKind_Grid, DF_VIEW_SETUP_FUNCTION_NAME(Memory), DF_VIEW_CMD_FUNCTION_NAME(Memory), DF_VIEW_UI_FUNCTION_NAME(Memory)}, {(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|1*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("bitmap"), str8_lit_comp("Bitmap"), DF_IconKind_Binoculars, DF_VIEW_SETUP_FUNCTION_NAME(Bitmap), DF_VIEW_CMD_FUNCTION_NAME(Bitmap), DF_VIEW_UI_FUNCTION_NAME(Bitmap)}, +{(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|0*DF_ViewSpecFlag_CanFilter|1*DF_ViewSpecFlag_FilterIsCode|0*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("color_rgba"), str8_lit_comp("Color (RGBA)"), DF_IconKind_Palette, DF_VIEW_SETUP_FUNCTION_NAME(ColorRGBA), DF_VIEW_CMD_FUNCTION_NAME(ColorRGBA), DF_VIEW_UI_FUNCTION_NAME(ColorRGBA)}, {(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|1*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|1*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("exception_filters"), str8_lit_comp("Exception Filters"), DF_IconKind_Gear, DF_VIEW_SETUP_FUNCTION_NAME(ExceptionFilters), DF_VIEW_CMD_FUNCTION_NAME(ExceptionFilters), DF_VIEW_UI_FUNCTION_NAME(ExceptionFilters)}, {(0|0*DF_ViewSpecFlag_ParameterizedByEntity|0*DF_ViewSpecFlag_ProjectSpecific|1*DF_ViewSpecFlag_CanSerialize|1*DF_ViewSpecFlag_CanFilter|0*DF_ViewSpecFlag_FilterIsCode|1*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("settings"), str8_lit_comp("Settings"), DF_IconKind_Gear, DF_VIEW_SETUP_FUNCTION_NAME(Settings), DF_VIEW_CMD_FUNCTION_NAME(Settings), DF_VIEW_UI_FUNCTION_NAME(Settings)}, }; @@ -221,7 +222,7 @@ DF_GfxViewRuleSpecInfo df_g_gfx_view_rule_spec_info_table[16] = { str8_lit_comp("omit"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*1)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*1)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*0), DF_GFX_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_NAME(omit) , DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_NAME(omit) , 0, str8_lit_comp("") }, { str8_lit_comp("no_addr"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*1)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*0), 0, DF_GFX_VIEW_RULE_LINE_STRINGIZE_FUNCTION_NAME(no_addr) , 0, str8_lit_comp("") }, { str8_lit_comp("checkbox"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*1)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*0), 0, 0, DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_NAME(checkbox) , str8_lit_comp("") }, -{ str8_lit_comp("rgba"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*1)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*1), 0, 0, DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_NAME(rgba) , str8_lit_comp("") }, +{ str8_lit_comp("rgba"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*1)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*1), 0, 0, DF_GFX_VIEW_RULE_ROW_UI_FUNCTION_NAME(rgba) , str8_lit_comp("color_rgba") }, { str8_lit_comp("text"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*1), 0, 0, 0, str8_lit_comp("code") }, { str8_lit_comp("disasm"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*1), 0, 0, 0, str8_lit_comp("disassembly") }, { str8_lit_comp("memory"), (DF_GfxViewRuleSpecInfoFlag_VizRowProd*0)|(DF_GfxViewRuleSpecInfoFlag_LineStringize*0)|(DF_GfxViewRuleSpecInfoFlag_RowUI*0)|(DF_GfxViewRuleSpecInfoFlag_ViewUI*1), 0, 0, 0, str8_lit_comp("memory") }, diff --git a/src/df/gfx/generated/df_gfx.meta.h b/src/df/gfx/generated/df_gfx.meta.h index b51a086e..0f208938 100644 --- a/src/df/gfx/generated/df_gfx.meta.h +++ b/src/df/gfx/generated/df_gfx.meta.h @@ -38,6 +38,7 @@ DF_GfxViewKind_Disassembly, DF_GfxViewKind_Output, DF_GfxViewKind_Memory, DF_GfxViewKind_Bitmap, +DF_GfxViewKind_ColorRGBA, DF_GfxViewKind_ExceptionFilters, DF_GfxViewKind_Settings, DF_GfxViewKind_COUNT, @@ -191,6 +192,7 @@ DF_VIEW_SETUP_FUNCTION_DEF(Disassembly); DF_VIEW_SETUP_FUNCTION_DEF(Output); DF_VIEW_SETUP_FUNCTION_DEF(Memory); DF_VIEW_SETUP_FUNCTION_DEF(Bitmap); +DF_VIEW_SETUP_FUNCTION_DEF(ColorRGBA); DF_VIEW_SETUP_FUNCTION_DEF(ExceptionFilters); DF_VIEW_SETUP_FUNCTION_DEF(Settings); DF_VIEW_CMD_FUNCTION_DEF(Null); @@ -223,6 +225,7 @@ DF_VIEW_CMD_FUNCTION_DEF(Disassembly); DF_VIEW_CMD_FUNCTION_DEF(Output); DF_VIEW_CMD_FUNCTION_DEF(Memory); DF_VIEW_CMD_FUNCTION_DEF(Bitmap); +DF_VIEW_CMD_FUNCTION_DEF(ColorRGBA); DF_VIEW_CMD_FUNCTION_DEF(ExceptionFilters); DF_VIEW_CMD_FUNCTION_DEF(Settings); DF_VIEW_UI_FUNCTION_DEF(Null); @@ -255,6 +258,7 @@ DF_VIEW_UI_FUNCTION_DEF(Disassembly); DF_VIEW_UI_FUNCTION_DEF(Output); DF_VIEW_UI_FUNCTION_DEF(Memory); DF_VIEW_UI_FUNCTION_DEF(Bitmap); +DF_VIEW_UI_FUNCTION_DEF(ColorRGBA); DF_VIEW_UI_FUNCTION_DEF(ExceptionFilters); DF_VIEW_UI_FUNCTION_DEF(Settings); @@ -275,7 +279,7 @@ C_LINKAGE_BEGIN 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]; -extern DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[32]; +extern DF_ViewSpecInfo df_g_gfx_view_kind_spec_info_table[33]; extern DF_CmdParamSlot df_g_cmd_param_slot_2_view_spec_src_map[7]; extern String8 df_g_cmd_param_slot_2_view_spec_dst_map[7]; extern String8 df_g_cmd_param_slot_2_view_spec_cmd_map[7]; diff --git a/src/eval/eval_bundles.c b/src/eval/eval_bundles.c index 283df382..296df697 100644 --- a/src/eval/eval_bundles.c +++ b/src/eval/eval_bundles.c @@ -194,77 +194,6 @@ e_value_eval_from_eval(E_Eval eval) } ProfEnd(); return eval; - - // TODO(rjf): @spaces check regs path -#if 0 - switch(eval.mode) - { - //- rjf: no work to be done. already in value mode - default: - case E_Mode_Value:{}break; - - //- rjf: address => resolve into value, if leaf - case E_Mode_Offset: - { - E_TypeKey type_key = e_type_unwrap(eval.type_key); - E_TypeKind type_kind = e_type_kind_from_key(type_key); - if(type_kind == E_TypeKind_Array) - { - eval.mode = E_Mode_Value; - } - else if(e_interpret_ctx->memory_read != 0) - { - U64 type_byte_size = e_type_byte_size_from_key(type_key); - Rng1U64 value_vaddr_range = r1u64(eval.value.u64, eval.value.u64 + type_byte_size); - MemoryZeroStruct(&eval.value); - if(!e_type_key_match(type_key, e_type_key_zero()) && - type_byte_size <= sizeof(E_Value) && - e_interpret_ctx->memory_read(e_interpret_ctx->memory_read_user_data, &eval.value, value_vaddr_range)) - { - eval.mode = E_Mode_Value; - - // rjf: mask&shift, for bitfields - if(type_kind == E_TypeKind_Bitfield && type_byte_size <= sizeof(U64)) - { - Temp scratch = scratch_begin(0, 0); - E_Type *type = e_type_from_key(scratch.arena, type_key); - U64 valid_bits_mask = 0; - for(U64 idx = 0; idx < type->count; idx += 1) - { - valid_bits_mask |= (1<> type->off; - eval.value.u64 = eval.value.u64 & valid_bits_mask; - eval.type_key = type->direct_type_key; - scratch_end(scratch); - } - - // rjf: manually sign-extend - switch(type_kind) - { - default: break; - case E_TypeKind_S8: {eval.value.s64 = (S64)*((S8 *)&eval.value.u64);}break; - case E_TypeKind_S16: {eval.value.s64 = (S64)*((S16 *)&eval.value.u64);}break; - case E_TypeKind_S32: {eval.value.s64 = (S64)*((S32 *)&eval.value.u64);}break; - } - } - } - }break; - - //- rjf: register => resolve into value - case E_Mode_Reg: - { - E_TypeKey type_key = eval.type_key; - U64 type_byte_size = e_type_byte_size_from_key(type_key); - U64 reg_off = eval.value.u64; - MemoryZeroStruct(&eval.value); - MemoryCopy(&eval.value.u256, ((U8 *)e_interpret_ctx->reg_data + reg_off), Min(type_byte_size, sizeof(U64)*4)); - eval.mode = E_Mode_Value; - }break; - } -#endif - - return eval; } internal E_Eval