From a2a70a0f33d7854c97243c063a596089da60d989 Mon Sep 17 00:00:00 2001 From: Synthasmagoria Date: Fri, 24 Jul 2026 12:57:44 +0200 Subject: [PATCH] Fixed a bad reference --- .gitignore | 1 + build_desktop.sh | 2 +- libraries/pool/pool.odin | 9 +++++---- main_desktop.odin | 3 +++ program.odin | 35 ++++++++++++++++++++++++++++------- signal_handler.odin | 5 +++++ 6 files changed, 43 insertions(+), 12 deletions(-) create mode 100644 signal_handler.odin diff --git a/.gitignore b/.gitignore index f97116d..07dfee8 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ build cscope.out cscope.in.out cscope.po.out +transformation_visualizer diff --git a/build_desktop.sh b/build_desktop.sh index bad59ee..2083143 100755 --- a/build_desktop.sh +++ b/build_desktop.sh @@ -2,6 +2,6 @@ OUT_DIR="build/desktop" mkdir -p $OUT_DIR -odin build . -strict-style -out:$OUT_DIR/game_desktop.bin -no-bounds-check -disable-assert -o:size -extra-linker-flags:"-Wl,--gc-sections,-s" +odin build . -out:$OUT_DIR/game -no-bounds-check -disable-assert -o:size -extra-linker-flags:"-Wl,--gc-sections,-s" cp -R ./assets/ ./$OUT_DIR/ echo "Desktop build created in ${OUT_DIR}" diff --git a/libraries/pool/pool.odin b/libraries/pool/pool.odin index dfa6c9b..da8d5e0 100644 --- a/libraries/pool/pool.odin +++ b/libraries/pool/pool.odin @@ -1,14 +1,13 @@ package adb_pool Pool :: struct($T: typeid) { - pool: []T, - usage, capacity: int, + pool: []T, + usage: int, } init :: proc(pool: ^Pool($T), capacity: int, allocator := context.allocator) { pool.pool = make([]T, capacity, allocator) pool.usage = 0 - pool.capacity = capacity } elems_available :: proc(pool: ^Pool($T), capacity: int) -> bool { @@ -16,7 +15,9 @@ elems_available :: proc(pool: ^Pool($T), capacity: int) -> bool { } get :: proc(pool: ^Pool($T), count: int) -> []T { - elements := pool.pool[pool.usage:pool.usage + count] + range_to := pool.usage + count + assert(range_to <= len(pool.pool), "pool.get count reaches outside preallocated size") + elements := pool.pool[pool.usage:] pool.usage += count return elements } diff --git a/main_desktop.odin b/main_desktop.odin index 5aea694..e734ba5 100644 --- a/main_desktop.odin +++ b/main_desktop.odin @@ -10,6 +10,9 @@ main :: proc() { // os.set_working_directory(exe_dir) rl.ChangeDirectory(rl.GetApplicationDirectory()) back.register_segfault_handler() + context.assertion_failure_proc = back.assertion_failure_proc + register_illegal_instruction_handler() + context.logger = log.create_console_logger() init() diff --git a/program.odin b/program.odin index fab2d7b..81a52cf 100644 --- a/program.odin +++ b/program.odin @@ -159,8 +159,8 @@ UiButton_AddMat4CallbackData :: struct { } program_add_mat4 :: proc(data: rawptr) { - data := cast(^UiButton_AddMat3CallbackData)data - field_pool_add_mat3(&data.program.matrix_field_pool, data.mat) + data := cast(^UiButton_AddMat4CallbackData)data + field_pool_add_mat4(&data.program.matrix_field_pool, data.mat) } field_pool_add_mat4 :: proc(pool: ^FieldPool(f32), m: mat4) { @@ -224,17 +224,38 @@ program_matrix_mode_dropdown_callback :: proc(previous, current: i32, data: rawp program_set_message_state(program, .ChangeMatrixTypeClearData) } -program_build_ui :: proc() -> []UiElement { - matrix_add_button_callback_data := UiButton_AddMat2CallbackData { - program = &program, - mat = mat2{0, 1, 2, 3}, +program_add_matrix_button_data :: proc(label: cstring, matrix_type: MatrixType, allocator := context.temp_allocator) -> UiElementData_Button { + callback: UiElementCallback_Button + callback_data: rawptr + switch program.matrix_mode_actual { + case .Mat2: + callback = program_add_mat2 + data := new(UiButton_AddMat2CallbackData, context.temp_allocator) + data^ = {program = &program, mat = mat2{0, 1, 2, 3}} + callback_data = cast(rawptr)data + case .Mat3: + callback = program_add_mat3 + data := new(UiButton_AddMat3CallbackData, context.temp_allocator) + data^ = {program = &program, mat = mat3{0, 1, 2, 3, 4, 5, 6, 7, 8}} + callback_data = cast(rawptr)data + case .Mat4: + callback = program_add_mat4 + data := new(UiButton_AddMat4CallbackData, context.temp_allocator) + data^ = {program = &program, mat = mat4{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}} + callback_data = cast(rawptr)data } + return {label = label, callback = callback, callback_data = callback_data} +} + +program_build_ui :: proc() -> []UiElement { + ui_button_size_top_bar := v2{32.0, 32.0} ui_dropdown_size_top_bar := v2{96.0, 32.0} ui_start(&program.ui_state) ui_container_begin({label = ""}) - ui_button(ui_button_size_top_bar, {label = "#10#", callback = program_add_mat2, callback_data = cast(rawptr)&matrix_add_button_callback_data}) + matrix_add_data := program_add_matrix_button_data("#10#", program.matrix_mode_actual, context.temp_allocator) + ui_button(ui_button_size_top_bar, matrix_add_data) ui_same_line() ui_button(ui_button_size_top_bar, {label = "#11#"}) ui_same_line() diff --git a/signal_handler.odin b/signal_handler.odin new file mode 100644 index 0000000..4a0d3a9 --- /dev/null +++ b/signal_handler.odin @@ -0,0 +1,5 @@ +package main + +register_illegal_instruction_handler :: proc() { + _register_illegal_instruction_handler() +}