From 6e80c811cf73d9b301ce796b734de5811d6e314c Mon Sep 17 00:00:00 2001 From: PS Date: Wed, 6 Apr 2022 20:29:32 +0200 Subject: [PATCH] Paged memory allocator, and async file system --- admin.txt | 18 +- build/build_.sh | 2 +- run_tree/data/font.ttf | Bin 0 -> 158080 bytes run_tree/wasm/debug/lumenarium.wasm | Bin 57484 -> 0 bytes run_tree/win32/intel/debug/debug.rdbg | Bin 1206 -> 1488 bytes .../intel/debug/lumenarium_first_win32.obj | Bin 160688 -> 246446 bytes src_v2/editor/lumenarium_editor.cpp | 26 +- src_v2/editor/lumenarium_editor.h | 1 + src_v2/editor/lumenarium_editor_renderer.cpp | 13 +- src_v2/editor/lumenarium_editor_ui.cpp | 452 ++++++++++++++++++ src_v2/editor/lumenarium_editor_ui.h | 175 +++++++ src_v2/editor/lumenarium_interface.cpp | 1 - src_v2/editor/lumenarium_ui.h | 36 -- src_v2/engine/lumenarium_engine.cpp | 50 ++ src_v2/engine/lumenarium_engine_assembly.h | 3 + src_v2/engine/lumenarium_engine_output.cpp | 24 + src_v2/engine/lumenarium_engine_output.h | 67 +++ .../engine/output/lumenarium_output_sacn.cpp | 207 ++++++++ src_v2/engine/output/lumenarium_output_sacn.h | 22 + .../engine/output/lumenarium_output_uart.cpp | 12 + src_v2/engine/output/lumenarium_output_uart.h | 9 + src_v2/libs/HandmadeMath.h | 19 + src_v2/lumenarium_first.cpp | 20 +- src_v2/lumenarium_first.h | 15 +- src_v2/lumenarium_hash.cpp | 58 +++ src_v2/lumenarium_input.cpp | 34 +- src_v2/lumenarium_memory.cpp | 387 +++++++++++++-- src_v2/lumenarium_memory.h | 45 ++ src_v2/lumenarium_string.cpp | 26 +- src_v2/lumenarium_tests.cpp | 86 ++++ src_v2/lumenarium_texture_atlas.cpp | 128 +++++ src_v2/lumenarium_types.h | 200 +++++++- src_v2/platform/lumenarium_assert.h | 7 +- src_v2/platform/lumenarium_platform.h | 150 +++++- .../platform/wasm/lumenarium_wasm_webgl.cpp | 29 +- .../platform/win32/lumenarium_first_win32.cpp | 15 + .../platform/win32/lumenarium_win32_file.cpp | 33 ++ .../win32/lumenarium_win32_graphics.cpp | 83 +++- .../win32/lumenarium_win32_memory.cpp | 8 +- .../platform/win32/lumenarium_win32_opengl.h | 7 +- .../win32/lumenarium_win32_window.cpp | 3 + src_v2/user_space/user_space_incenter.cpp | 2 - 42 files changed, 2334 insertions(+), 139 deletions(-) create mode 100644 run_tree/data/font.ttf delete mode 100644 run_tree/wasm/debug/lumenarium.wasm create mode 100644 src_v2/editor/lumenarium_editor_ui.cpp create mode 100644 src_v2/editor/lumenarium_editor_ui.h delete mode 100644 src_v2/editor/lumenarium_interface.cpp delete mode 100644 src_v2/editor/lumenarium_ui.h create mode 100644 src_v2/engine/lumenarium_engine_output.cpp create mode 100644 src_v2/engine/lumenarium_engine_output.h create mode 100644 src_v2/engine/output/lumenarium_output_sacn.cpp create mode 100644 src_v2/engine/output/lumenarium_output_sacn.h create mode 100644 src_v2/engine/output/lumenarium_output_uart.cpp create mode 100644 src_v2/engine/output/lumenarium_output_uart.h create mode 100644 src_v2/lumenarium_hash.cpp create mode 100644 src_v2/lumenarium_memory.h create mode 100644 src_v2/lumenarium_texture_atlas.cpp diff --git a/admin.txt b/admin.txt index 8586538..98ecab0 100644 --- a/admin.txt +++ b/admin.txt @@ -7,14 +7,20 @@ ## TODO -1. Upgrade Lumenarium's plubming - 1. switch over to compiling with clang & bash based build scripts - 2. better platform layer separation +1. Upgrade Lumenarium's plumbing + x. switch over to compiling with clang & bash based build scripts + x. better platform layer separation 3. osx and webgl layers, possibly linux? - 4. remove dll compiling, just build all in one go + x. remove dll compiling, just build all in one go 5. improve ui - 1. default to using a basic layout object - 2. improve widget handling (see a_trick_of_fate) + [ ] get widgets and widget ids working + - see a trick of fate + [ ] clip widgets to regions + [ ] text rendering + [ ] interaction + [ ] layout manager + - do layout the way youre doing styling - optional pointer to a struct + and fallback on some global default 2. Incenter 1. Sculpture generation from list of lat-long coordinates diff --git a/build/build_.sh b/build/build_.sh index b7d0978..81df051 100644 --- a/build/build_.sh +++ b/build/build_.sh @@ -144,7 +144,7 @@ CompilerFlags_DEBUG_win32="" add_flag CompilerFlags_DEBUG_win32 "-Od" # add_flag CompilerFlags_DEBUG_win32 "-Zi" # add_flag CompilerFlags_DEBUG_win32 "-DDEBUG" # -add_flag CompilerFlags_DEBUG_win32 "-DPRINT_ASSERTS" +# add_flag CompilerFlags_DEBUG_win32 "-DPRINT_ASSERTS" CompilerFlags_DEBUG="-O0" add_flag CompilerFlags_DEBUG "-g" # diff --git a/run_tree/data/font.ttf b/run_tree/data/font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..06aafc067310fba0d33b0a133654475ac73388ab GIT binary patch literal 158080 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

~51kCJv>^F~QVhnxG5_ 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 Y9YEr9)1Y)}VZFzZ{KL)vpS;8W0h1O{P5=M^ diff --git a/run_tree/win32/intel/debug/debug.rdbg b/run_tree/win32/intel/debug/debug.rdbg index f78c41edc47c99c5665b943ccc884228d58a7102..24dbe61ef213c4152686ca14906596a6c51d642e 100644 GIT binary patch delta 356 zcmdnSd4YRE7%MLW1B1ilhfL~|=QHvORFsq!rN$?g*3mLdChcb5nEk ziz-37{lH>6ObXb<#LF}DQu50|>KK8}1OX5YH$R9E$OB<^AkNJ%El!OukO4A_OA<>` zb?q|q3Q9}j!5qD`qQuBA#R-inXBMf8|y^V817z;N81H3=oAU2+Shl!KXck)J{$SfxQ z$t+AElMgVu0I}xe2u5*Mz2t%d&&dZFHGn*oiBG-kfu=F=05Qne#RCO0^U`&I6dO>yD7CmWXYw4DJVu7eW~?TY6IeMIc_ufq NdI4Fitc*Yvi~vS@Gd=(S diff --git a/run_tree/win32/intel/debug/lumenarium_first_win32.obj b/run_tree/win32/intel/debug/lumenarium_first_win32.obj index f70d1299c12b73a147d011c4127b17a69051d413..848a54baeada618f9cba1429eba09517b66f8569 100644 GIT binary patch literal 246446 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[0], 6, 0); @@ -90,30 +90,38 @@ void make_quad(Platform_Geometry_Buffer* geo, Platform_Shader* shd, Platform_Tex *tex = platform_texture_create((u8*)pix, 4, 4, 4); } +internal void +ed_load_font_cb(Platform_File_Async_Job_Args result) +{ + s32 x = 5; +} + internal void ed_init(App_State* state) { Editor* editor = allocator_alloc_struct(permanent, Editor); state->editor = editor; + state->editor->ui = ui_create(4096, 4096, state->input_state, permanent); + + // make the default quad for us to draw with + // TODO(PS): this might be unnecessary with the per-frame buffer we use now make_quad(&editor->renderer.geo, &editor->renderer.shd, &editor->renderer.tex); + + platform_file_async_read(lit_str("data/font.ttf"), ed_load_font_cb); + } internal void ed_frame_prepare(App_State* state) { - + ui_frame_prepare(&state->editor->ui, state->editor->window_dim); } internal void ed_frame(App_State* state) { - for (u32 i = 0; i < 16; i++) - { - if (i % 2 == 1) continue; - pix[i] += 1; - } - platform_texture_update(state->editor->renderer.tex, (u8*)pix, 4, 4, 4); - + edr_render_begin(state); + ui_draw(&state->editor->ui); edr_render(state); } diff --git a/src_v2/editor/lumenarium_editor.h b/src_v2/editor/lumenarium_editor.h index 08ab6df..9cd17c2 100644 --- a/src_v2/editor/lumenarium_editor.h +++ b/src_v2/editor/lumenarium_editor.h @@ -7,6 +7,7 @@ struct Editor { v2 window_dim; Editor_Renderer renderer; + UI ui; }; #endif //LUMENARIUM_EDITOR_H diff --git a/src_v2/editor/lumenarium_editor_renderer.cpp b/src_v2/editor/lumenarium_editor_renderer.cpp index deedaa7..67d9e34 100644 --- a/src_v2/editor/lumenarium_editor_renderer.cpp +++ b/src_v2/editor/lumenarium_editor_renderer.cpp @@ -1,7 +1,6 @@ - internal void -edr_render(App_State* state) +edr_render_begin(App_State* state) { Platform_Graphics_Frame_Desc desc = {}; desc.clear_color = { 0.1f, 0.1f, 0.1f, 1 }; @@ -9,9 +8,15 @@ edr_render(App_State* state) desc.viewport_max = state->editor->window_dim; platform_frame_begin(desc); platform_frame_clear(); - +} + +internal void +edr_render(App_State* state) +{ +#if 0 platform_geometry_bind(state->editor->renderer.geo); - platform_texture_bind(state->editor->renderer.tex); + platform_texture_bind(state->editor->ui.atlas_texture); platform_shader_bind(state->editor->renderer.shd); platform_geometry_draw(state->editor->renderer.geo); +#endif } \ No newline at end of file diff --git a/src_v2/editor/lumenarium_editor_ui.cpp b/src_v2/editor/lumenarium_editor_ui.cpp new file mode 100644 index 0000000..75ffc24 --- /dev/null +++ b/src_v2/editor/lumenarium_editor_ui.cpp @@ -0,0 +1,452 @@ +#define WHITE_SPRITE_ID 511 + +static String ui_shader_vert_win32 = lit_str( + "#version 330 core\n" + "layout (location = 0) in vec4 a_pos;\n" + "layout (location = 1) in vec2 a_uv;\n" + "layout (location = 2) in vec4 a_color;\n" + "out vec2 uv;\n" + "out vec4 color;\n" + "uniform mat4 proj;\n" + "void main(void) {\n" + " gl_Position = proj * a_pos;\n" + " uv = a_uv;\n" + " color = a_color;\n" + "}" + ); + +static String ui_shader_frag_win32 = lit_str( + "#version 330 core\n" + "in vec2 uv;\n" + "in vec4 color;\n" + "out vec4 FragColor;\n" + "uniform sampler2D texture;\n" + "void main(void) {\n" + " FragColor = texture(texture, uv) * color;\n" + " if (FragColor.w <= 0.01f) discard;\n" + "}" + ); + +internal UI +ui_create(u32 widget_pool_cap, u32 verts_cap, Input_State* input, Allocator* a) +{ + UI result = {}; + result.input = input; + + // Widgets + result.widgets.free = allocator_alloc_array(a, UI_Widget, widget_pool_cap); + result.widgets.free_cap = widget_pool_cap; + + // Per Frame Vertex Buffer + result.verts_cap = verts_cap; + result.verts = allocator_alloc_array(a, UI_Vertex, verts_cap); + result.indices_cap = verts_cap * 2; + result.indices = allocator_alloc_array(a, u32, result.indices_cap); + + result.per_frame_buffer = platform_geometry_buffer_create( + (r32*)result.verts, + result.verts_cap, + result.indices, + result.indices_cap + ); + + String attrs[] = { lit_str("a_pos"), lit_str("a_uv"), lit_str("a_color") }; + String uniforms[] = { lit_str("proj") }; + result.shader = platform_shader_create( + ui_shader_vert_win32, + ui_shader_frag_win32, + attrs, 3, + uniforms, 1 + ); + + platform_vertex_attrib_pointer( + result.per_frame_buffer, result.shader, 4, result.shader.attrs[0], 10, 0 + ); + platform_vertex_attrib_pointer( + result.per_frame_buffer, result.shader, 2, result.shader.attrs[1], 10, 4 + ); + platform_vertex_attrib_pointer( + result.per_frame_buffer, result.shader, 4, result.shader.attrs[2], 10, 6 + ); + + // Texture Atlas + result.atlas = texture_atlas_create(1024, 1024, 512, permanent); + result.atlas_texture = platform_texture_create(result.atlas.pixels, 1024, 1024, 1024); + + u32 white_sprite[] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; + ui_sprite_register(&result, (u8*)white_sprite, 2, 2, WHITE_SPRITE_ID); + + return result; +} + +internal u32 +ui_vert_push(UI* ui, v3 p, v2 t, v4 c) +{ + assert(ui->verts_len < ui->verts_cap); + u32 index = ui->verts_len++; + + ui->verts[index].pos = {p.x, p.y, p.z, 1}; + ui->verts[index].uv = t; + ui->verts[index].color = c; + + return index; +} + +internal void +ui_index_push(UI* ui, u32 i) +{ + assert(ui->indices_len < ui->indices_cap); + ui->indices[ui->indices_len++] = i; +} + +internal void +ui_quad_push(UI* ui, v3 pmin, v3 pmax, v2 tmin, v2 tmax, v4 c) +{ + u32 bl = ui_vert_push(ui, pmin, tmin, c); + u32 br = ui_vert_push(ui, v3{pmax.x, pmin.y, pmin.z}, v2{tmax.x,tmin.y}, c); + u32 tr = ui_vert_push(ui, pmax, tmax, c); + u32 tl = ui_vert_push(ui, v3{pmin.x, pmax.y, pmin.z}, v2{tmin.x,tmax.y}, c); + + ui_index_push(ui, bl); + ui_index_push(ui, br); + ui_index_push(ui, tr); + + ui_index_push(ui, bl); + ui_index_push(ui, tr); + ui_index_push(ui, tl); +} + +internal void +ui_sprite_register(UI* ui, u8* pixels, u32 w, u32 h, u32 id) +{ + texture_atlas_register(&ui->atlas, pixels, w, h, id); + platform_texture_update(ui->atlas_texture, ui->atlas.pixels, ui->atlas.width, ui->atlas.height, ui->atlas.width); +} + +internal void +ui_sprite_push(UI* ui, v3 pmin, v3 pmax, u32 id, v4 color) +{ + v4 uv = texture_atlas_sprite_get_uvs(&ui->atlas, id); + ui_quad_push(ui, pmin, pmax, uv.xy, uv.zw, color); +} + +internal void +ui_sprite_push(UI* ui, v3 pmin, v3 pmax, u32 id) +{ + ui_sprite_push(ui, pmin, pmax, id, v4{1,1,1,1}); +} + +internal void +ui_frame_prepare(UI* ui, v2 window_dim) +{ + ui->verts_len = 0; + ui->indices_len = 0; + + ui->widgets.free_len = 0; + ui->widgets.active_parent = 0; + ui->widgets.root = ui_widget_pool_push(&ui->widgets, lit_str("root")); + ui->widgets.active_parent = ui->widgets.root; + + v2 half_d = window_dim * 0.5f; + ui->proj = HMM_Orthographic(0, window_dim.x, window_dim.y, 0, 0.01f, 100); + + if (ui->widget_next_hot.value != 0) + { + ui->widget_next_hot_frames += 1; + if (ui->widget_hot_frames > 1) + { + ui->widget_next_hot = UI_Widget_Id{0}; + } + } + if (ui->widget_hot.value != 0) + { + ui->widget_hot_frames += 1; + if (ui->widget_hot_frames > 1) ui->widget_hot = UI_Widget_Id{0}; + } +} + +global bool show = false; + +internal void +ui_draw(UI* ui) +{ + UI_Widget_Desc d0 = { + { + (UIWidgetStyle_Bg), + WHITE_V4, + BLACK_V4, + WHITE_SPRITE_ID, + }, + lit_str("Hi there!"), + v2{ 32.0f, 32.0f }, + v2{ 128.0f, 64.0f }, + }; + UI_Widget_Result r0 = ui_widget_push(ui, d0); + + UI_Widget_Desc d1 = d0; + d1.style.flags |= UIWidgetStyle_Outline | UIWidgetStyle_MouseClick; + d1.style.color_bg = PINK_V4; + d1.style.color_fg = GREEN_V4; + d1.p_min = v2{ 512, 32 }; + d1.p_max = v2{ 640, 128 }; + d1.string = lit_str("Hello"); + UI_Widget_Result r1 = ui_widget_push(ui, d1); + bool clicked_r1 = has_flag(r1.flags, UIWidgetResult_MouseLeft_WentUp); + if (clicked_r1) show = !show; + + UI_Widget_Result r2 = {}; + if (show) + { + UI_Widget_Desc d2 = d1; + d1.string = lit_str("Hello There"); + d1.p_min = v2{ 560, 64 }; + d1.p_max = v2{ 700, 256 }; + r2 = ui_widget_push(ui, d1); + } + + bool clicked_r2 = has_flag(r2.flags, UIWidgetResult_MouseLeft_WentUp); + assert( + (!clicked_r1 && !clicked_r2) || + (clicked_r1 && !clicked_r2) || + (!clicked_r1 && clicked_r2) + ); + + u32 widget_count = ui->widgets.free_len; + r32 range_min = -10; + r32 range_max = -1; + r32 range_step = (range_max - range_min) / (r32)widget_count; + ui_widgets_to_geometry_recursive(ui, ui->widgets.root, -10, range_step); + + platform_geometry_buffer_update( + &ui->per_frame_buffer, + (r32*)ui->verts, + 0, + ui->verts_len * 10, + ui->indices, + 0, + ui->indices_len + ); + platform_shader_bind(ui->shader); + platform_set_uniform(ui->shader, 0, ui->proj); + platform_texture_bind(ui->atlas_texture); + platform_geometry_bind(ui->per_frame_buffer); + platform_geometry_draw(ui->per_frame_buffer, ui->indices_len); +} + +//////////////////////////////////////////// +// Widgets + +internal UI_Widget_Id +ui_widget_id_create(String string, u32 index) +{ + assert(string.len != 0 && string.str != 0); + UI_Widget_Id result = {}; + result.value = hash_djb2_to_u32(string); + result.index = index; + return result; +} + +internal UI_Widget* +ui_widget_pool_push(UI_Widget_Pool* pool, String string) +{ + assert(pool->free_len < pool->free_cap); + UI_Widget* result = pool->free + pool->free_len++; + + result->id = ui_widget_id_create(string, pool->free_len); + result->parent = 0; + result->next = 0; + result->child_first = 0; + result->child_last = 0; + + if (pool->active_parent) + { + result->parent = pool->active_parent; + sll_push( + pool->active_parent->child_first, + pool->active_parent->child_last, + result + ); + } + + return result; +} + +internal void +ui_widget_pool_pop(UI_Widget_Pool* pool) +{ + if (pool->active_parent->parent) + { + pool->active_parent = pool->active_parent->parent; + } +} + +internal bool +ui_widget_id_equals(UI_Widget_Id a, UI_Widget_Id b) +{ + return (a.value == b.value); +} + +internal bool +ui_widget_id_is_valid(UI_Widget_Id h) +{ + return h.value != 0; +} + +internal void +ui_widget_next_hot_set(UI* ui, UI_Widget* w) +{ + ui->widget_next_hot = w->id; + ui->widget_next_hot_frames = 0; +} + +internal void +ui_widget_hot_set(UI* ui, UI_Widget* w) +{ + ui->widget_hot = w->id; + ui->widget_hot_frames = 0; +} + +internal UI_Widget_Result +ui_widget_push(UI* ui, UI_Widget_Desc desc) +{ + UI_Widget_Result result = {}; + + UI_Widget* w = ui_widget_pool_push(&ui->widgets, desc.string); + w->desc = desc; + + if (has_flag(desc.style.flags, UIWidgetStyle_MouseClick)) + { + // CASES: + // Mouse Over | Mouse Clicked | Is Next Hot | Response + // f | f | t | clear next hot + // f | f | f | do nothing + // f | t | f | do nothing + // t | f | f | beome next hot + // t | t | f | become next hot + // t | t | t | become hot + + v2 mouse_p = ui->input->frame_hot->mouse_pos; + bool mouse_over = ( + mouse_p.x >= desc.p_min.x && mouse_p.x <= desc.p_max.x && + mouse_p.y >= desc.p_min.y && mouse_p.y <= desc.p_max.y + ); + + if (mouse_over) + { + if (ui_widget_id_equals(w->id, ui->widget_next_hot)) + { + if (input_key_is_down(ui->input, KeyCode_MouseLeftButton)) + { + ui_widget_hot_set(ui, w); + result.flags |= UIWidgetResult_MouseLeft_IsDown; + } + if (input_key_went_up(ui->input, KeyCode_MouseLeftButton)) + { + result.flags |= UIWidgetResult_MouseLeft_WentUp; + ui->widget_hot = UI_Widget_Id{0}; + } + } + else if ((w->id.index >= ui->widget_next_hot.index) && ui->widget_hot.value == 0) + { + ui_widget_next_hot_set(ui, w); + } + } + else + { + if (ui_widget_id_equals(w->id, ui->widget_next_hot)) + { + ui->widget_next_hot = UI_Widget_Id{0}; + } + } + } + + return result; +} + +internal void +ui_widget_pop(UI* ui, UI_Widget* widget) +{ + assert(ui_widget_id_equals(widget->id, ui->widgets.active_parent->id)); + ui_widget_pool_pop(&ui->widgets); +} + +internal r32 +ui_widgets_to_geometry_recursive(UI* ui, UI_Widget* widget, r32 z_start, r32 z_step) +{ + r32 z_at = z_start; + for (UI_Widget* child = widget->child_first; child != 0; child = child->next) + { + UI_Widget_Desc desc = child->desc; + v3 bg_min = v2_to_v3(desc.p_min, z_at); + v3 bg_max = v2_to_v3(desc.p_max, z_at); + + v4 color_fg = desc.style.color_fg; + v4 color_bg = desc.style.color_bg; + if (ui_widget_id_equals(ui->widget_next_hot, child->id)) + { + color_fg = desc.style.color_bg; + color_bg = desc.style.color_fg; + } + if (ui_widget_id_equals(ui->widget_hot, child->id)) + { + color_fg = desc.style.color_fg; + color_bg = desc.style.color_bg; + } + + if (has_flag(child->desc.style.flags, UIWidgetStyle_Outline)) + { + ui_sprite_push(ui, bg_min, bg_max, WHITE_SPRITE_ID, color_fg); + bg_min += v3{ 3, 3, 0}; + bg_max -= v3{ 3, 3, 0}; + } + + if (has_flag(child->desc.style.flags, UIWidgetStyle_Bg)) + { + bg_min.z += z_step; + bg_max.z += z_step; + ui_sprite_push(ui, bg_min, bg_max, desc.style.sprite, color_bg); + } + + if (has_flag(child->desc.style.flags, UIWidgetStyle_Text)) + { + // TODO(PS): + } + + if (child->child_first) + { + z_at = ui_widgets_to_geometry_recursive(ui, child, z_at + z_step, z_step); + } + + z_at += z_step; + } + return z_at; +} + +/////////////////////////////////////////// +// Specific Widget Implementations + +global UI_Style_Sheet ui_default_style_sheet = { + { + + } +}; + +internal UI_Widget_Style +ui_get_style(UI* ui, UI_Widget_Kind kind) +{ + if (ui->style_sheet) return ui->style_sheet->styles[kind]; + return ui_default_style_sheet.styles[kind]; +} + +internal void +ui_text(UI* ui, String string) +{ + +} + +internal bool +ui_button(UI* ui, String string) +{ + return false; +} + diff --git a/src_v2/editor/lumenarium_editor_ui.h b/src_v2/editor/lumenarium_editor_ui.h new file mode 100644 index 0000000..d2254c2 --- /dev/null +++ b/src_v2/editor/lumenarium_editor_ui.h @@ -0,0 +1,175 @@ +/* date = March 28th 2022 10:52 pm */ + +#ifndef LUMENARIUM_UI_H +#define LUMENARIUM_UI_H + +///////////////////////////////////////////////////////////// +// Interface + +struct UI_Vertex +{ + v4 pos; + v2 uv; + v4 color; +}; + +#define UI_WIDGET_ID_VALID_BIT 1 << 31 + +union UI_Widget_Id +{ + // equality of widget id's only relies on the value field + // which is a hash of the widget's string + u32 value; + + // this struct tracks the index of the widget only to be able + // to override next hot in cases where an earlier element became + // next hot that is in the same location as the current one + u32 index; +}; + +typedef u32 UI_Widget_Style_Flags; +enum +{ + UIWidgetStyle_None = 0, + UIWidgetStyle_Bg = 1, + UIWidgetStyle_Text = 2, + UIWidgetStyle_Outline = 4, + UIWidgetStyle_MouseClick = 8, + UIWidgetStyle_MouseDrag = 16, +}; + +// akin to a css class, could be used to style multiple +// elements +struct UI_Widget_Style +{ + UI_Widget_Style_Flags flags; + v4 color_bg; + v4 color_fg; + + u32 sprite; +}; + +// combination of style info and per-instance data +struct UI_Widget_Desc +{ + UI_Widget_Style style; + String string; + v2 p_min; + v2 p_max; +}; + +struct UI_Widget +{ + UI_Widget_Id id; + UI_Widget_Desc desc; + + UI_Widget* parent; + UI_Widget* next; + UI_Widget* child_first; + UI_Widget* child_last; +}; + +typedef u32 UI_Widget_Result_Flags; +enum +{ + UIWidgetResult_None = 0, + UIWidgetResult_MouseLeft_IsDown = 1, + UIWidgetResult_MouseLeft_WentUp = 2, +}; + +struct UI_Widget_Result +{ + UI_Widget_Result_Flags flags; +}; + +enum UI_Widget_Kind +{ + UIWidget_Text, + + // Buttons + UIWidget_Button, + UIWidget_Toggle, + UIWidget_Menu, + UIWidget_Dropdown, + + // Sliders + UIWidget_HSlider, + UIWidget_VSlider, + UIWidget_HScroll, + UIWidget_VScroll, + + // Panels + UIWidget_Window, + + UIWidget_Count, +}; + +struct UI_Style_Sheet +{ + UI_Widget_Style styles[UIWidget_Count]; +}; + +struct UI_Widget_Pool +{ + UI_Widget* free; + u32 free_cap; + u32 free_len; + + UI_Widget* root; + UI_Widget* active_parent; +}; + +struct UI +{ + UI_Vertex* verts; + u32 verts_len; + u32 verts_cap; + + u32* indices; + u32 indices_len; + u32 indices_cap; + + Texture_Atlas atlas; + + UI_Widget_Pool widgets; + UI_Style_Sheet* style_sheet; + + UI_Widget_Id widget_next_hot; + UI_Widget_Id widget_hot; + + // frames since these values were set + u16 widget_next_hot_frames; + u16 widget_hot_frames; + + Input_State* input; + + m44 proj; + Platform_Shader shader; + Platform_Texture atlas_texture; + Platform_Geometry_Buffer per_frame_buffer; +}; + +// Interface + +internal UI ui_create(); +internal void ui_quad_push(UI* ui, v3 pmin, v3 pmax, v2 tmin, v2 tmax, v4 c); +internal void ui_sprite_register(UI* ui, u8* pixels, u32 w, u32 h, u32 id); +internal void ui_sprite_push(UI* ui, v3 pmin, v3 pmax, u32 id, v4 color); +internal void ui_sprite_push(UI* ui, v3 pmin, v3 pmax, u32 id); +internal void ui_draw(UI* ui); + +// Widgets + +internal UI_Widget_Id ui_widget_id_create(u32 index_in_parent, String string); +internal bool ui_widget_id_equals(UI_Widget_Id a, UI_Widget_Id b); +internal bool ui_widget_id_is_valid(UI_Widget_Id h); + +internal UI_Widget* ui_widget_pool_push(UI_Widget_Pool* pool, String string); +internal void ui_widget_pool_pop(UI_Widget_Pool* pool); + +internal UI_Widget_Result ui_widget_push(UI* ui, UI_Widget_Desc desc); +internal void ui_widget_pop(UI* ui, UI_Widget* widget); + +internal r32 ui_widgets_to_geometry_recursive(UI* ui, UI_Widget* widget, r32 z_start, r32 z_step); + +#endif //LUMENARIUM_UI_H diff --git a/src_v2/editor/lumenarium_interface.cpp b/src_v2/editor/lumenarium_interface.cpp deleted file mode 100644 index ab0c014..0000000 --- a/src_v2/editor/lumenarium_interface.cpp +++ /dev/null @@ -1 +0,0 @@ -// \ No newline at end of file diff --git a/src_v2/editor/lumenarium_ui.h b/src_v2/editor/lumenarium_ui.h deleted file mode 100644 index 72c6af8..0000000 --- a/src_v2/editor/lumenarium_ui.h +++ /dev/null @@ -1,36 +0,0 @@ -/* date = March 28th 2022 10:52 pm */ - -#ifndef LUMENARIUM_UI_H -#define LUMENARIUM_UI_H - -struct Font_Glyph -{ - u32 code_point; - v2 uv_min; - v2 uv_max; -}; - -struct Font_Glyph_Table -{ - Font_Glyph* values; - u32 cap; - u32 len; -}; - -struct Font_Bitmap -{ - u8* pixels; - u32 width; - u32 height; - u32 stride; - - Platform_Texture texture; -}; - -struct Font -{ - Font_Glyph_Table glyphs; - Font_Bitmap bitmap; -}; - -#endif //LUMENARIUM_UI_H diff --git a/src_v2/engine/lumenarium_engine.cpp b/src_v2/engine/lumenarium_engine.cpp index 9870e8b..2f9bb08 100644 --- a/src_v2/engine/lumenarium_engine.cpp +++ b/src_v2/engine/lumenarium_engine.cpp @@ -3,6 +3,10 @@ internal void en_init(App_State* state, App_Init_Desc desc) { state->assemblies = assembly_array_create(permanent, desc.assembly_cap); + + Output* o = &state->output; + register_output_method(o, OutputData_NetworkSACN, output_network_sacn_build, output_network_sacn_init()); + register_output_method(o, OutputData_ComUART, output_network_sacn_build, output_com_uart_init()); } internal void @@ -15,6 +19,52 @@ internal void en_frame(App_State* state) { + /////////////////////////////////////// + // Output Data + + Output_Data_Queue output_queue = {}; + output_queue.a = scratch; + + // build output data buffers + Output_Methods methods; + Assembly_Array assemblies = state->assemblies; + for (u32 i = 0; i < assemblies.len; i++) + { + Assembly_Strip_Array strips = assemblies.strip_arrays[i]; + for (u32 j = 0; j < strips.len; j++) + { + Assembly_Strip* strip = strips.strips + j; + Build_Output_Data_Buffer* method_proc = methods.procs[strip->output_kind]; + u8* method_data = methods.method_data[strip->output_kind]; + if (method_proc == 0) continue; + method_proc(state, i, strip, method_data, &output_queue); + } + } + + // output the buffers + // TODO(PS): we could sort these first if switchig between output + // types is time consuming + for (Output_Data* at = output_queue.first; at != 0; at = at->next) + { + // NOTE(PS): we can overload each switch case as more methods come in + // ie. OutputData_NetworkSACN and OutputData_NetworkArtNet could use + // the same case since at this point they just need to push data out + // over a socket + switch (at->kind) + { + case OutputData_NetworkSACN: + { + // TODO(PS): platform network io + } break; + + case OutputData_ComUART: + { + // TODO(PS): platform com io + } break; + + invalid_code_path; + } + } } internal void diff --git a/src_v2/engine/lumenarium_engine_assembly.h b/src_v2/engine/lumenarium_engine_assembly.h index f105ff9..2c94fac 100644 --- a/src_v2/engine/lumenarium_engine_assembly.h +++ b/src_v2/engine/lumenarium_engine_assembly.h @@ -42,6 +42,9 @@ struct Assembly_Strip u32 pixels_len; // array of indices into the Assembly_Pixel_Buffer for the same assembly u32* pixels; + + Output_Data_Kind output_kind; + u32 sacn_universe; }; struct Assembly_Strip_Array diff --git a/src_v2/engine/lumenarium_engine_output.cpp b/src_v2/engine/lumenarium_engine_output.cpp new file mode 100644 index 0000000..92c23ad --- /dev/null +++ b/src_v2/engine/lumenarium_engine_output.cpp @@ -0,0 +1,24 @@ + +internal void +register_output_method(Output* output, Output_Data_Kind kind, Build_Output_Data_Buffer* proc, u8* method_data) +{ + output->methods.procs[kind] = proc; + output->methods.method_data[kind] = method_data; +} + +internal Output_Data* +output_data_queue_push(Output_Data_Queue* q, u32 size, Output_Data_Kind kind) +{ + Output_Data* d = allocator_alloc_struct(q->a, Output_Data); + d->kind = kind; + d->data.size = size; + d->data.base = allocator_alloc(q->a, size); + return d; +} + +internal void +output_data_set_network_addr(Output_Data* d, u32 send_addr, u32 port) +{ + d->network.v4_addr = send_addr; + d->network.port = port; +} diff --git a/src_v2/engine/lumenarium_engine_output.h b/src_v2/engine/lumenarium_engine_output.h new file mode 100644 index 0000000..d8b9a76 --- /dev/null +++ b/src_v2/engine/lumenarium_engine_output.h @@ -0,0 +1,67 @@ +/* date = March 30th 2022 9:23 am */ + +#ifndef LUMENARIUM_ENGINE_OUTPUT_H +#define LUMENARIUM_ENGINE_OUTPUT_H + +typedef u8 Output_Data_Kind; +enum +{ + OutputData_Invalid = 0, + OutputData_NetworkSACN, + OutputData_ComUART, + OutputData_Count, +}; + +struct Output_Data_Network +{ + // Platform_Socket_Handle socket; + u32 v4_addr; + u32 port; +}; + +struct Output_Data_Com +{ + String port; +}; + +struct Output_Data +{ + Output_Data_Kind kind; + union + { + Output_Data_Network network; + Output_Data_Com com; + }; + Data data; + + Output_Data* next; +}; + +struct Output_Data_Queue +{ + Output_Data* first; + Output_Data* last; + u32 len; + Allocator* a; +}; + +typedef void Build_Output_Data_Buffer(App_State* state, u32 assembly_id, Assembly_Strip* strip, u8* method_data, Output_Data_Queue* queue); + +struct Output_Methods +{ + Build_Output_Data_Buffer* procs[OutputData_Count]; + u8* method_data[OutputData_Count]; +}; + +struct Output +{ + Output_Methods methods; +}; + +internal void register_output_method(Output* output, Output_Data_Kind kind, Build_Output_Data_Buffer* proc, u8* method_data); + +internal Output_Data* output_data_queue_push(Output_Data_Queue* q, u32 size, Output_Data_Kind kind); + +internal void output_data_set_network_addr(Output_Data* d, u32 send_addr, u32 port); + +#endif //LUMENARIUM_ENGINE_OUTPUT_H diff --git a/src_v2/engine/output/lumenarium_output_sacn.cpp b/src_v2/engine/output/lumenarium_output_sacn.cpp new file mode 100644 index 0000000..c7f961a --- /dev/null +++ b/src_v2/engine/output/lumenarium_output_sacn.cpp @@ -0,0 +1,207 @@ +#define SACN_DEFAULT_PORT 5568 + + +// a description of the address space being used +#define SACN_PREAMBLE_SIZE_ADDR 0 +#define SACN_POSTAMBLE_SIZE_ADDR 2 +#define SACN_ACN_IDENTIFIER_ADDR 4 +#define SACN_ROOT_FLAGS_AND_LEN_ADDR 16 +#define SACN_ROOT_VECTOR_ADDR 18 +#define SACN_CID_ADDR 22 +#define SACN_FRAMING_FLAGS_AND_LEN_ADDR 38 +#define SACN_FRAMING_VECTOR_ADDR 40 +#define SACN_SOURCE_NAME_ADDR 44 +#define SACN_PRIORITY_ADDR 108 +#define SACN_RESERVED_ADDR 109 +#define SACN_SEQ_NUM_ADDR 111 +#define SACN_OPTIONS_ADDR 112 +#define SACN_UNIVERSE_ADDR 113 +#define SACN_DMP_FLAGS_AND_LEN_ADDR 115 +#define SACN_DMP_VECTOR_ADDR 117 +#define SACN_DMP_ADDRESS_AND_DATA_ADDR 118 +#define SACN_FIRST_PROPERTY_ADDRESS_ADDR 119 +#define SACN_ADDRESS_INC_ADDR 121 +#define SACN_PROP_COUNT_ADDR 123 +#define SACN_START_CODE_ADDR 125 +#define SACN_PROP_VALUES_ADDR (SACN_START_CODE_ADDR + 1) + +// Common Sizes +#define SACN_BUFFER_HEADER_SIZE 126 +#define SACN_BUFFER_BODY_SIZE 512 +#define SACN_BUFFER_SIZE (SACN_BUFFER_HEADER_SIZE + SACN_BUFFER_BODY_SIZE) + +#define SACN_SOURCE_NAME_SIZE 64 +#define SACN_ACN_IDENTIFIER_SIZE 12 +#define SACN_RLP_PREAMBLE_SIZE 16 +#define SACN_RLP_POSTAMBLE_SIZE 0 + +// Data Definitions +#define SACN_ACN_IDENTIFIER lit_str("ASC-E1.17\0\0\0") +#define SACN_ROOT_VECTOR 4 +#define SACN_FRAMING_VECTOR 2 +#define SACN_DMP_VECTOR 2 +#define SACN_ADDRESS_AND_DATA_FORMAT 0xa1 +#define SACN_ADDR_INC 1 +#define SACN_DMP_FIRST_PROPERTY_ADDRESS_FORCE 0 +#define SACN_RESERVED_VALUE 0 + +#define SACN_VHD_L_FLAG 0x80 +#define SACN_VHD_V_FLAG 0x40 +#define SACN_VHD_H_FLAG 0x20 +#define SACN_VHD_D_FLAG 0x10 + +#define SACN_VHD_MAXFLAGBYTES 7 //The maximum amount of bytes used to pack the flags, len, and vector +#define SACN_VHD_MAXLEN 0x0fffff //The maximum packet length is 20 bytes long +#define SACN_VHD_MAXMINLENGTH 4095 //The highest length that will fit in the "smallest" length pack + + +internal void +sacn_vhd_pack_flags(Data_Writer* w, b8 inherit_vec, b8 inherit_head, b8 inherit_data) +{ + u8 last_byte = dw_get_u8(w) & 0x8F; + w->at -= 1; + + if (!inherit_vec) { last_byte |= SACN_VHD_V_FLAG; } + if (!inherit_head) { last_byte |= SACN_VHD_H_FLAG; } + if (!inherit_data) { last_byte |= SACN_VHD_D_FLAG; } + + dw_put_u8(w, last_byte); +} + +internal void +sacn_vhd_pack_len(Data_Writer* w, u32 len, b8 include_len) +{ + u32 len_adjusted = len; + if (include_len) + { + if (len + 1 > SACN_VHD_MAXMINLENGTH) + { + len_adjusted += 2; + } + else + { + len_adjusted += 1; + } + } + + // Mask out the length bits to keep flags intact + u8 last_byte = dw_get_u8(w) & 0x70; + w->at -= 1; + + if (len_adjusted > SACN_VHD_MAXMINLENGTH) last_byte |= SACN_VHD_L_FLAG; + + u8* pack_buffer = (u8*)&len_adjusted; + if (len_adjusted <= SACN_VHD_MAXMINLENGTH) + { + last_byte |= (pack_buffer[1] & 0x0f); + dw_put_u8(w, last_byte); + dw_put_u8(w, pack_buffer[0]); + } + else + { + last_byte |= (pack_buffer[2] & 0x0f); + dw_put_u8(w, pack_buffer[1]); + dw_put_u8(w, pack_buffer[0]); + } +} + +internal void +sacn_fill_buffer_header(Output_Data* d, u16 universe, Sacn* sacn) +{ + assert(d && d->data.size > 0); + + // TODO(PS): these should be passed in? + u16 slot_count = 0; + u8 start_code = 0; + u8 priority = 0; + u16 reserved = 0; + u8 options = 0; + + Data_Writer w = {}; + w.data = d->data; + + dw_put_u16_b(&w, SACN_RLP_PREAMBLE_SIZE); + dw_put_u16_b(&w, SACN_RLP_POSTAMBLE_SIZE); + dw_put_str(&w, SACN_ACN_IDENTIFIER); + + sacn_vhd_pack_flags(&w, false, false, false); + sacn_vhd_pack_len(&w, SACN_BUFFER_HEADER_SIZE - SACN_RLP_PREAMBLE_SIZE + slot_count, false); + + dw_put_u32_b(&w, SACN_ROOT_VECTOR); + + for (u32 i = 0; i < SACN_CID_BYTES; i++) dw_put_u8(&w, sacn->cid.bytes[i]); + + sacn_vhd_pack_flags(&w, false, false, false); + sacn_vhd_pack_len(&w, SACN_BUFFER_HEADER_SIZE - SACN_FRAMING_FLAGS_AND_LEN_ADDR + slot_count, false); + + dw_put_u32_b(&w, SACN_FRAMING_VECTOR); + dw_put_str(&w, sacn->source_name); + + dw_put_u8(&w, priority); + dw_put_u16_b(&w, reserved); + dw_put_u8(&w, 0); // Sequence Number starts at 0, gets updated + dw_put_u8(&w, options); + dw_put_u16_b(&w, universe); + + sacn_vhd_pack_flags(&w, false, false, false); + sacn_vhd_pack_len(&w, SACN_BUFFER_HEADER_SIZE - SACN_DMP_FLAGS_AND_LEN_ADDR + slot_count, false); + + dw_put_u8(&w, SACN_DMP_VECTOR); + dw_put_u8(&w, SACN_ADDRESS_AND_DATA_FORMAT); + dw_put_u8(&w, 0); // dmp first priority addr + dw_put_u8(&w, SACN_ADDR_INC); // dmp address increment + dw_put_u16_b(&w, slot_count + 1); + dw_put_u8(&w, start_code); + + assert(w.at == SACN_BUFFER_HEADER_SIZE); +} + +internal void +sacn_fill_buffer_body(Output_Data* d, u32* leds_placed) +{ + +} + +internal Sacn_Cid +sacn_string_to_cid(String str) +{ + return {}; +} + +internal u32 +sacn_universe_to_send_addr(u32 universe) +{ + return 0; +} + +internal u8* +output_network_sacn_init() +{ + Sacn* result = allocator_alloc_struct(permanent, Sacn); + // TODO(PS): get platform send socket + + String cid_str = lit_str("{67F9D986-544E-4abb-8986-D5F79382586C}"); + result->cid = sacn_string_to_cid(cid_str); + + return (u8*)result; +} + +internal void +output_network_sacn_build(App_State* state, u32 assembly_id, Assembly_Strip* strip, u8* method_data, Output_Data_Queue* queue) +{ + Sacn* sacn = (Sacn*)method_data; + + u16 universe = (u16)strip->sacn_universe; + u32 send_port = SACN_DEFAULT_PORT; + for (u32 leds_placed = 0; leds_placed < strip->pixels_len;) + { + u32 v4_send_addr = sacn_universe_to_send_addr(universe); + + Output_Data* d = output_data_queue_push(queue, SACN_BUFFER_SIZE, OutputData_NetworkSACN); + output_data_set_network_addr(d, v4_send_addr, send_port); + + sacn_fill_buffer_header(d, universe, sacn); + sacn_fill_buffer_body(d, &leds_placed); + universe += 1; + } +} diff --git a/src_v2/engine/output/lumenarium_output_sacn.h b/src_v2/engine/output/lumenarium_output_sacn.h new file mode 100644 index 0000000..568020a --- /dev/null +++ b/src_v2/engine/output/lumenarium_output_sacn.h @@ -0,0 +1,22 @@ +/* date = March 30th 2022 9:55 am */ + +#ifndef LUMENARIUM_OUTPUT_SACN_H +#define LUMENARIUM_OUTPUT_SACN_H + +#define SACN_CID_BYTES 16 +struct Sacn_Cid +{ + u8 bytes[SACN_CID_BYTES]; +}; + +struct Sacn +{ + Sacn_Cid cid; + s32 sequence_iter; + String source_name; +}; + +internal u8* output_network_sacn_init(); +internal void output_network_sacn_build(App_State* state, u32 assembly_id, Assembly_Strip* strip, u8* method_data, Output_Data_Queue* queue); + +#endif //LUMENARIUM_OUTPUT_SACN_H diff --git a/src_v2/engine/output/lumenarium_output_uart.cpp b/src_v2/engine/output/lumenarium_output_uart.cpp new file mode 100644 index 0000000..cc34f65 --- /dev/null +++ b/src_v2/engine/output/lumenarium_output_uart.cpp @@ -0,0 +1,12 @@ + +internal u8* +output_com_uart_init() +{ + return 0; +} + +internal void +output_com_uart_build(App_State* state, u32 assembly_id, Assembly_Strip* strip, u8* method_data, Output_Data_Queue* queue) +{ + +} diff --git a/src_v2/engine/output/lumenarium_output_uart.h b/src_v2/engine/output/lumenarium_output_uart.h new file mode 100644 index 0000000..c23a6aa --- /dev/null +++ b/src_v2/engine/output/lumenarium_output_uart.h @@ -0,0 +1,9 @@ +/* date = March 30th 2022 9:57 am */ + +#ifndef LUMENARIUM_OUTPUT_UART_H +#define LUMENARIUM_OUTPUT_UART_H + +internal u8* output_com_uart_init(); +internal void output_com_uart_build(App_State* state, u32 assembly_id, Assembly_Strip* strip, u8* method_data, Output_Data_Queue* queue); + +#endif //LUMENARIUM_OUTPUT_UART_H diff --git a/src_v2/libs/HandmadeMath.h b/src_v2/libs/HandmadeMath.h index c80d4c3..8f71b31 100644 --- a/src_v2/libs/HandmadeMath.h +++ b/src_v2/libs/HandmadeMath.h @@ -462,6 +462,12 @@ extern "C" float Ignored0_; float Ignored1_; }; + struct + { + hmm_vec2 xy; + float Ignored0b_; + float Ignored1b_; + }; struct { @@ -469,6 +475,12 @@ extern "C" hmm_vec2 YZ; float Ignored3_; }; + struct + { + float Ignored2b_; + hmm_vec2 yz; + float Ignored3b_; + }; struct { @@ -477,6 +489,13 @@ extern "C" hmm_vec2 ZW; }; + struct + { + float Ignored4b_; + float Ignored5b_; + hmm_vec2 zw; + }; + float Elements[4]; } hmm_vec4; diff --git a/src_v2/lumenarium_first.cpp b/src_v2/lumenarium_first.cpp index 003f8d5..e4f4e0d 100644 --- a/src_v2/lumenarium_first.cpp +++ b/src_v2/lumenarium_first.cpp @@ -6,8 +6,9 @@ lumenarium_init() { App_State* state = 0; - permanent = bump_allocator_create_reserve(MB(4)); + permanent = bump_allocator_create_reserve(GB(1)); scratch = bump_allocator_create_reserve(KB(64)); + platform_file_jobs_init(); run_tests(); @@ -18,7 +19,7 @@ lumenarium_init() add_flag(state->flags, AppState_IsRunning); add_flag(state->flags, AppState_RunEditor); - state->input_state = input_state_create(); + state->input_state = input_state_create(permanent); en_init(state, desc); if (has_flag(state->flags, AppState_RunEditor)) @@ -34,7 +35,7 @@ lumenarium_frame_prepare(App_State* state) { allocator_clear(scratch); - input_state_swap_frames(&state->input_state); + input_state_swap_frames(state->input_state); en_frame_prepare(state); if (has_flag(state->flags, AppState_RunEditor)) @@ -42,12 +43,14 @@ lumenarium_frame_prepare(App_State* state) ed_frame_prepare(state); } incenter_frame_prepare(state); + + platform_file_async_jobs_do_work(4); } internal void lumenarium_frame(App_State* state) { - en_frame(state); + //en_frame(state); if (has_flag(state->flags, AppState_RunEditor)) { ed_frame(state); @@ -58,7 +61,7 @@ lumenarium_frame(App_State* state) internal void lumenarium_event(Platform_Window_Event evt, App_State* state) { - Input_Frame* frame = state->input_state.frame_hot; + Input_Frame* frame = state->input_state->frame_hot; switch (evt.kind) { case WindowEvent_MouseScroll: @@ -66,6 +69,13 @@ lumenarium_event(Platform_Window_Event evt, App_State* state) frame->mouse_scroll = evt.scroll_amt; } break; + case WindowEvent_MouseMoved: + { + v2 mouse_pos_old = frame->mouse_pos; + frame->mouse_pos = v2{ (r32)evt.mouse_x, (r32)evt.mouse_y }; + state->input_state->mouse_pos_delta = frame->mouse_pos - mouse_pos_old; + } break; + case WindowEvent_ButtonDown: case WindowEvent_ButtonUp: { diff --git a/src_v2/lumenarium_first.h b/src_v2/lumenarium_first.h index 441ef69..1d6c20c 100644 --- a/src_v2/lumenarium_first.h +++ b/src_v2/lumenarium_first.h @@ -9,11 +9,18 @@ typedef struct App_State App_State; #include "lumenarium_memory.cpp" #include "lumenarium_string.cpp" #include "lumenarium_input.cpp" +#include "lumenarium_texture_atlas.cpp" +#include "lumenarium_hash.cpp" // Engine +typedef struct Assembly_Strip Assembly_Strip; +#include "engine/lumenarium_engine_output.h" #include "engine/lumenarium_engine_assembly.h" +#include "engine/output/lumenarium_output_uart.h" +#include "engine/output/lumenarium_output_sacn.h" // Editor +#include "editor/lumenarium_editor_ui.h" #include "editor/lumenarium_editor_renderer.h" #include "editor/lumenarium_editor.h" @@ -49,15 +56,21 @@ struct App_State { App_State_Flags flags; - Input_State input_state; + Input_State* input_state; + Assembly_Array assemblies; + Output output; Editor* editor; }; #include "engine/lumenarium_engine_assembly.cpp" #include "engine/lumenarium_engine.cpp" +#include "engine/lumenarium_engine_output.cpp" +#include "engine/output/lumenarium_output_uart.cpp" +#include "engine/output/lumenarium_output_sacn.cpp" +#include "editor/lumenarium_editor_ui.cpp" #include "editor/lumenarium_editor_renderer.cpp" #include "editor/lumenarium_editor.cpp" diff --git a/src_v2/lumenarium_hash.cpp b/src_v2/lumenarium_hash.cpp new file mode 100644 index 0000000..d219110 --- /dev/null +++ b/src_v2/lumenarium_hash.cpp @@ -0,0 +1,58 @@ +/* date = April 1st 2022 7:29 pm */ + +#ifndef LUMENARIUM_HASH_CPP +#define LUMENARIUM_HASH_CPP + +// +// DJB2 +// Source: http://www.cse.yorku.ca/~oz/hash.html + +internal u32 +hash_djb2_to_u32(char* str, u64 len) +{ + u32 result = 5381; + for (u64 i = 0; i < len; i++) + { + result = ((result << 5) + result) + (u8)str[i]; + } + return result; +} + +internal u32 +hash_djb2_to_u32(char* str) +{ + u64 len = c_str_len(str); + return hash_djb2_to_u32(str, len); +} + +internal u32 +hash_djb2_to_u32(String str) +{ + return hash_djb2_to_u32((char*)str.str, str.len); +} + +internal u64 +hash_djb2_to_u64(char* str, u64 len) +{ + u64 result = 5381; + for (u64 i = 0; i < len; i++) + { + result = ((result << 5) + result) + (u8)str[i]; + } + return result; +} + +internal u64 +hash_djb2_to_u64(char* str) +{ + u64 len = c_str_len(str); + return hash_djb2_to_u64(str, len); +} + +internal u64 +hash_djb2_to_u64(String str) +{ + return hash_djb2_to_u64((char*)str.str, str.len); +} + +#endif //LUMENARIUM_HASH_CPP diff --git a/src_v2/lumenarium_input.cpp b/src_v2/lumenarium_input.cpp index 8937018..9b6344b 100644 --- a/src_v2/lumenarium_input.cpp +++ b/src_v2/lumenarium_input.cpp @@ -24,15 +24,30 @@ struct Input_State #define key_was_down(key_flags) has_flag((key_flags), KeyFlag_State_WasDown) #define key_is_down(key_flags) has_flag((key_flags), KeyFlag_State_IsDown) -#define key_was_up(key_flags) (!has_flag((key_flags), KeyFlag_State_WasDown) -#define key_is_up(key_flags) (!has_flag((key_flags), KeyFlag_State_IsDown) +#define key_was_up(key_flags) (!has_flag((key_flags), KeyFlag_State_WasDown)) +#define key_is_up(key_flags) (!has_flag((key_flags), KeyFlag_State_IsDown)) -internal Input_State -input_state_create() +internal Input_State* +input_state_create(Allocator* a) { - Input_State result = {}; - result.frame_hot = result.frames + 0; - result.frame_cold = result.frames + 1; + Input_State* result = allocator_alloc_struct(a, Input_State); + result->frame_hot = result->frames + 0; + result->frame_cold = result->frames + 1; + return result; +} + +internal Platform_Key_Flags +input_key_advance(Platform_Key_Flags flag) +{ + Platform_Key_Flags result = flag; + if (key_is_down(flag)) + { + add_flag(result, KeyFlag_State_WasDown); + } + if (key_is_up(flag)) + { + rem_flag(result, KeyFlag_State_WasDown); + } return result; } @@ -46,7 +61,10 @@ input_state_swap_frames(Input_State* input_state) // Clear the new hot input frame Platform_Key_Flags* hot_key_flags = input_state->frame_hot->key_flags; Platform_Key_Flags* cold_key_flags = input_state->frame_cold->key_flags; - for (u32 i = 0; i < KeyCode_Count; i++) hot_key_flags[i] = cold_key_flags[i]; + for (u32 i = 0; i < KeyCode_Count; i++) + { + hot_key_flags[i] = input_key_advance(cold_key_flags[i]); + } input_state->frame_hot->string_input_len = 0; } diff --git a/src_v2/lumenarium_memory.cpp b/src_v2/lumenarium_memory.cpp index f6a3421..103396f 100644 --- a/src_v2/lumenarium_memory.cpp +++ b/src_v2/lumenarium_memory.cpp @@ -32,21 +32,25 @@ memory_copy_simd(u8* from, u8* to, u64 size) memory_copy_no_simd(from, to, size); } -# define memory_zero(b,s) memory_zero_simd((b),(s)) -# define memory_copy(f,t,s) memory_copy_simd((f),(t),(s)) +# define memory_zero_(b,s) memory_zero_simd((b),(s)) +# define memory_copy_(f,t,s) memory_copy_simd((f),(t),(s)) #else -# define memory_zero(b,s) memory_zero_no_simd((b),(s)) -# define memory_copy(f,t,s) memory_copy_no_simd((f),(t),(s)) +# define memory_zero_(b,s) memory_zero_no_simd((b),(s)) +# define memory_copy_(f,t,s) memory_copy_no_simd((f),(t),(s)) #endif // defined(PLATFORM_HAS_SIMD) #define zero_struct(s) memory_zero((u8*)(&s), sizeof(s)) +internal void memory_zero(u8* base, u64 size) { memory_zero_(base, size); } +internal void memory_copy(u8* from, u8* to, u64 size) { + memory_copy_(from, to, size); +} + u64 -size_to_pages(u64 size) +round_size_to_page_multiple(u64 size, u64 page_size) { - u64 page_size = platform_page_size(); u64 rem = size % page_size; if (rem != 0 || size < page_size) { @@ -56,6 +60,13 @@ size_to_pages(u64 size) return size; } +u64 +round_size_to_page_multiple(u64 size) +{ + u64 page_size = platform_page_size(); + return round_size_to_page_multiple(size, page_size); +} + ///////////////////////////////////////// // Allocator // @@ -64,37 +75,14 @@ size_to_pages(u64 size) // To implement a complete allocator, all that is really required // is to create its Allocator_Alloc function -typedef struct Allocator Allocator; - -typedef u8* Allocator_Alloc(Allocator* allocator, u64 size); -typedef void Allocator_Free(Allocator* allocator, u8* base, u64 size); -typedef u8* Allocator_Realloc(Allocator* allocator, u8* base, u64 old_size, u64 new_size); -typedef void Allocator_Clear(Allocator* allocator); - -struct Allocator +internal void +allocator_destroy_(Allocator* allocator, u64 custom_data_size) { - Allocator_Alloc* alloc; - Allocator_Free* free; - Allocator_Realloc* realloc; - Allocator_Clear* clear; - - Allocator* parent; - - u8* allocator_data; -}; - -#define allocator_alloc(a,s) (a)->alloc((a),(s)) -#define allocator_alloc_struct(a,t) (t*)(a)->alloc((a),sizeof(t)) -#define allocator_alloc_array(a,t,c) (t*)(a)->alloc((a),sizeof(t)*(c)) - -#define allocator_free(a,b,s) (a)->free((a),(b),(s)) -#define allocator_free_struct(a,b,t) (a)->free((a),(b),sizeof(t)) -#define allocator_free_array(a,b,t,c) (a)->free((a),(b),sizeof(t)*(c)) - -#define allocator_realloc(a,b,os,ns) (a)->realloc((a),(b),(os),(ns)) -#define allocator_realloc_array(a,b,t,oc,nc) (t*)(a)->realloc((a),(b),sizeof(t)*(oc),sizeof(t)*(nc)) - -#define allocator_clear(a) (a)->clear(a) + zero_struct(*allocator); + u64 size = sizeof(Allocator) + custom_data_size; + platform_mem_decommit((u8*)allocator, size); + platform_mem_release((u8*)allocator, size); +} ///////////////////////////////////////// // Bump Allocator @@ -105,13 +93,12 @@ struct Allocator_Bump u64 at; u64 size_committed; u64 size_reserved; + u64 page_size; }; internal u8* -bump_allocator_alloc(Allocator* allocator, u64 size) +bump_allocator_alloc_inner(Allocator* allocator, Allocator_Bump* bump, u64 size) { - Allocator_Bump* bump = (Allocator_Bump*)allocator->allocator_data; - u64 at_after = bump->at + size; // TODO(PS): align up to 8 bytes @@ -119,8 +106,15 @@ bump_allocator_alloc(Allocator* allocator, u64 size) { // determine new size of the arena u64 new_size = bump->size_committed * 2; - if (new_size == 0) new_size = platform_page_size(); - if (new_size < at_after) new_size = size_to_pages(at_after); + if (new_size == 0) + { + if (bump->page_size == 0) bump->page_size = platform_page_size(); + new_size = bump->page_size; + } + if (new_size < at_after) + { + new_size = round_size_to_page_multiple(at_after, bump->page_size); + } if (allocator->parent) { @@ -140,7 +134,7 @@ bump_allocator_alloc(Allocator* allocator, u64 size) { if (new_size <= bump->size_reserved) { - u64 next_page = size_to_pages(bump->at); + u64 next_page = round_size_to_page_multiple(bump->at); if (bump->at == 0 && bump->size_committed == 0) next_page = 0; u64 commit_amt = new_size - next_page; u8* new_page = platform_mem_commit(bump->base + next_page, commit_amt); @@ -162,6 +156,14 @@ bump_allocator_alloc(Allocator* allocator, u64 size) return result; } +internal u8* +bump_allocator_alloc(Allocator* allocator, u64 size) +{ + Allocator_Bump* bump = (Allocator_Bump*)allocator->allocator_data; + u8* result = bump_allocator_alloc_inner(allocator, bump, size); + return result; +} + internal u8* bump_allocator_realloc(Allocator* allocator, u8* base, u64 old_size, u64 new_size) { @@ -178,6 +180,21 @@ bump_allocator_clear(Allocator* allocator) bump->at = 0; } +internal void +bump_allocator_destroy_(Allocator_Bump* bump) +{ + platform_mem_decommit(bump->base, bump->size_committed); + platform_mem_release(bump->base, bump->size_reserved); +} + +internal void +bump_allocator_destroy(Allocator* allocator) +{ + Allocator_Bump* bump = (Allocator_Bump*)allocator->allocator_data; + bump_allocator_destroy_(bump); + allocator_destroy_(allocator, sizeof(Allocator_Bump)); +} + internal Allocator* bump_allocator_create_() { @@ -195,6 +212,7 @@ bump_allocator_create_() result->alloc = bump_allocator_alloc; result->realloc = bump_allocator_realloc; result->clear = bump_allocator_clear; + result->destroy = bump_allocator_destroy; result->allocator_data = (u8*)bump; return result; @@ -206,7 +224,7 @@ bump_allocator_create_reserve(u64 reserve_size) Allocator* result = bump_allocator_create_(); Allocator_Bump* bump = (Allocator_Bump*)result->allocator_data; - u64 reserve_pages = size_to_pages(reserve_size); + u64 reserve_pages = round_size_to_page_multiple(reserve_size); bump->base = platform_mem_reserve(reserve_pages); if (bump->base != 0) bump->size_reserved = reserve_pages; @@ -229,3 +247,286 @@ bump_allocator_create_child(Allocator* parent, u64 init_size) return result; } + +///////////////////////////////////////// +// Paged Allocator + +struct Allocator_Paged_Free_Region +{ + u64 pages; + Allocator_Paged_Free_Region* prev; + Allocator_Paged_Free_Region* next; +}; + +struct Allocator_Paged +{ + Allocator_Bump bump; + Allocator_Paged_Free_Region* free_first; +}; + +internal u8* +paged_allocator_alloc(Allocator* allocator, u64 size) +{ + // 1. Find the number of pages we need + // 2. Find a run of free pages that we can use + // If found, + // remove those pages from the run they are in + // return those pages of memory + // 3. Commit pages on the end + + Allocator_Paged* paged = (Allocator_Paged*)allocator->allocator_data; + if (paged->bump.page_size == 0) paged->bump.page_size = platform_page_size(); + + u64 rounded_size = round_size_to_page_multiple(size, paged->bump.page_size); + u64 pages_needed = rounded_size / paged->bump.page_size; + + u8* result = 0; + + // Find free pages + if (paged->free_first) + { + Allocator_Paged_Free_Region* found = 0; + for (Allocator_Paged_Free_Region* at = paged->free_first; at != 0; at = at->next) + { + // NOTE(PS): this set of conditions checks to see if is bigger than what + // we need. If it is, we also check to see if this is smaller than any + // region we've found before. And we abort the search if this region + // perfectly fits the size needed. + // + // This should make sure that we are always choosing the closest fit we + // can. I'm not sure this is the best strategy for dealing with fragmentation + // but its a decent first pass + if (at->pages >= pages_needed) + { + if (!found || (found->pages > at->pages)) + { + found = at; + if (found->pages == pages_needed) break; + } + } + } + + if (found) + { + result = (u8*)found; + if (found->pages > pages_needed) + { + Allocator_Paged_Free_Region* region_after = (Allocator_Paged_Free_Region*)(result + rounded_size); + if (found->prev != 0) found->prev->next = region_after; + region_after = found->next; + } + else + { + if (found->prev != 0) found->prev->next = found->next; + } + } + } + + if (!result) + { + result = bump_allocator_alloc_inner(allocator, &paged->bump, size); + } + + return result; +} + +#define region_end(r,page_size) ((u8*)(r) + ((r)->pages * page_size)) + +internal void +paged_region_insert( + Allocator_Paged_Free_Region* before, + Allocator_Paged_Free_Region* new_region, + Allocator_Paged_Free_Region* after, + u64 page_size + ){ + assert(after == 0 || before < after); + assert(before < new_region); + assert(after == 0 || new_region < after); + assert(new_region->prev == 0 && new_region->next == 0); + + u8* before_end = region_end(before, page_size); + u8* new_region_end = region_end(new_region, page_size); + + // Before + if (before_end == (u8*)new_region) + { + // merge the regions + before->pages += new_region->pages; + new_region = before; + assert(new_region_end == region_end(new_region, page_size)); + } + else + { + assert(before_end < (u8*)new_region); + before->next = new_region; + new_region->prev = before; + } + + // After + if (after != 0) + { + if (new_region_end == (u8*)after) + { + // merge the regions + new_region->pages += after->pages; + u8* a = region_end(after, page_size); + u8* b = region_end(new_region, page_size); + assert(a == b); + } + else + { + assert(new_region_end < (u8*)after); + new_region->next = after; + after->prev = new_region; + } + } +} + +internal void +paged_allocator_free(Allocator* allocator, u8* base, u64 size) +{ + // Figure out which page base is the base of, assert its the base + // figure out how many pages size represents. + // create a free range + // stick it in between contiguous free ranges + // if the ranges before or after meet this new one, merge them all + + Allocator_Paged* paged = (Allocator_Paged*)allocator->allocator_data; + + u64 page_base_rel = (base - paged->bump.base); + assert((page_base_rel % paged->bump.page_size) == 0); + u64 page_index = page_base_rel / paged->bump.page_size; + u64 size_pages_mult = round_size_to_page_multiple(size, paged->bump.page_size); + assert((size_pages_mult % paged->bump.page_size) == 0); + u64 page_count = size_pages_mult / paged->bump.page_size; + + Allocator_Paged_Free_Region* region = (Allocator_Paged_Free_Region*)base; + zero_struct(*region); + region->pages = page_count; + + Allocator_Paged_Free_Region* prev = 0; + Allocator_Paged_Free_Region* next = 0; + for (Allocator_Paged_Free_Region* at = paged->free_first; at != 0; at = at->next) + { + if (at < region) + { + prev = at; + next = at->next; + if (next != 0) + { + assert(next > region); + assert((u8*)next >= ((u8*)region + size_pages_mult)); + } + } + } + + if (prev && next) + { + // found a region to insert into + paged_region_insert(prev, region, next, paged->bump.page_size); + } + else if (prev) + { + // got to the end and all were before the free region in memory + paged_region_insert(prev, region, 0, paged->bump.page_size); + } + else + { + // free list is empty + paged->free_first = region; + } +} + +internal u8* +paged_allocator_realloc(Allocator* allocator, u8* base, u64 old_size, u64 new_size) +{ + // TODO(PS): + // Process: + // 1. Figure out which page base starts on + // 2. Find if there is a free region after base that is big enough to house + // the new size + // 3. If there is a free region, pull the needed memory out of it + // 4. Otherwise, alloc new_size, copy base into it, and free base + + // TODO(PS): you could do a simple version where you just always alloc, copy, free + return 0; +} + +internal void +paged_allocator_clear(Allocator* allocator) +{ + if (!allocator->allocator_data) return; + Allocator_Paged* paged = (Allocator_Paged*)allocator->allocator_data; + paged->bump.at = 0; + paged->free_first = 0; +} + +internal void +paged_allocator_destroy(Allocator* allocator) +{ + Allocator_Paged* paged = (Allocator_Paged*)allocator->allocator_data; + bump_allocator_destroy_(&paged->bump); + allocator_destroy_(allocator, sizeof(Allocator_Paged)); +} + +internal Allocator* +paged_allocator_create_() +{ + u64 size_needed = sizeof(Allocator) + sizeof(Allocator_Bump); + + u8* base = platform_mem_reserve(size_needed); + base = platform_mem_commit(base, size_needed); + + Allocator* result = (Allocator*)base; + zero_struct(*result); + + Allocator_Bump* bump = (Allocator_Bump*)base + sizeof(Allocator); + zero_struct(*bump); + + result->alloc = paged_allocator_alloc; + result->free = paged_allocator_free; + result->realloc = paged_allocator_realloc; + result->clear = paged_allocator_clear; + result->destroy = paged_allocator_destroy; + result->allocator_data = (u8*)bump; + + return result; +} + +internal Allocator* +paged_allocator_create_reserve(u64 reserve_size, u64 page_size) +{ + Allocator* result = paged_allocator_create_(); + Allocator_Paged* paged = (Allocator_Paged*)result->allocator_data; + + u64 reserve_pages = round_size_to_page_multiple(reserve_size); + paged->bump.page_size = page_size; + paged->bump.base = platform_mem_reserve(reserve_pages); + if (paged->bump.base != 0) paged->bump.size_reserved = reserve_pages; + + return result; +} + +internal Allocator* +paged_allocator_create_reserve(u64 reserve_size) +{ + u64 page_size = platform_page_size(); + return paged_allocator_create_reserve(reserve_size, page_size); +} + +internal Allocator* +paged_allocator_create_child(Allocator* parent, u64 init_size) +{ + Allocator* result = bump_allocator_create_(); + result->parent = parent; + + Allocator_Paged* paged = (Allocator_Paged*)result->allocator_data; + paged->bump.base = allocator_alloc(result->parent, init_size); + if (paged->bump.base != 0) + { + paged->bump.size_reserved = init_size; + paged->bump.size_committed = init_size; + } + + return result; +} diff --git a/src_v2/lumenarium_memory.h b/src_v2/lumenarium_memory.h new file mode 100644 index 0000000..8b6a79f --- /dev/null +++ b/src_v2/lumenarium_memory.h @@ -0,0 +1,45 @@ +/* date = April 6th 2022 7:55 pm */ + +#ifndef LUMENARIUM_MEMORY_H +#define LUMENARIUM_MEMORY_H + +///////////////////////////////////////// +// Allocator + +typedef struct Allocator Allocator; + +typedef u8* Allocator_Alloc(Allocator* allocator, u64 size); +typedef void Allocator_Free(Allocator* allocator, u8* base, u64 size); +typedef u8* Allocator_Realloc(Allocator* allocator, u8* base, u64 old_size, u64 new_size); +typedef void Allocator_Clear(Allocator* allocator); +typedef void Allocator_Destroy(Allocator* allocator); + +struct Allocator +{ + Allocator_Alloc* alloc; + Allocator_Free* free; + Allocator_Realloc* realloc; + Allocator_Clear* clear; + Allocator_Destroy* destroy; + + Allocator* parent; + + u8* allocator_data; +}; + +#define allocator_alloc(a,s) (a)->alloc((a),(s)) +#define allocator_alloc_struct(a,t) (t*)(a)->alloc((a),sizeof(t)) +#define allocator_alloc_array(a,t,c) (t*)(a)->alloc((a),sizeof(t)*(c)) + +#define allocator_free(a,b,s) (a)->free((a),(b),(s)) +#define allocator_free_struct(a,b,t) (a)->free((a),(b),sizeof(t)) +#define allocator_free_array(a,b,t,c) (a)->free((a),(b),sizeof(t)*(c)) + +#define allocator_realloc(a,b,os,ns) (a)->realloc((a),(b),(os),(ns)) +#define allocator_realloc_array(a,b,t,oc,nc) (t*)(a)->realloc((a),(b),sizeof(t)*(oc),sizeof(t)*(nc)) + +#define allocator_clear(a) (a)->clear(a) +#define allocator_destroy(a) (a)->destroy(a) + +internal Allocator* paged_allocator_create_reserve(u64 reserve_size, u64 page_size); +#endif //LUMENARIUM_MEMORY_H diff --git a/src_v2/lumenarium_string.cpp b/src_v2/lumenarium_string.cpp index 157f2c6..adff229 100644 --- a/src_v2/lumenarium_string.cpp +++ b/src_v2/lumenarium_string.cpp @@ -54,6 +54,16 @@ char_to_forward_slash(u8 c) // Note that these don't actually modify any memory // just return structures that let you view it differently +internal String +string_create(u8* str, u64 len, u64 cap) +{ + String result = {}; + result.str = str; + result.len = len; + result.cap = cap; + return result; +} + internal String string_substring(String s, u64 min, u64 max) { @@ -213,15 +223,25 @@ string_chop_last_slash(String s) ///////////////////////////////////// // String Modifications +internal u64 +string_copy_to(String* dest, String src) +{ + u64 len_to_copy = dest->cap < src.len ? dest->cap : src.len; + memory_copy(src.str, dest->str, len_to_copy); + u64 null_term_index = len_to_copy; + if (null_term_index >= dest->cap) null_term_index -= 1; + dest->str[null_term_index] = 0; + dest->len = null_term_index; + return null_term_index; +} + internal String string_copy(String s, Allocator* a) { u64 size = s.cap; if (s.str[s.cap] != 0) size += 1; String result = allocator_alloc_string(a, size); - memory_copy(s.str, result.str, s.cap); - result.str[size] = 0; - result.len = size; + string_copy_to(&result, s); return result; } diff --git a/src_v2/lumenarium_tests.cpp b/src_v2/lumenarium_tests.cpp index 7472451..a7f99f5 100644 --- a/src_v2/lumenarium_tests.cpp +++ b/src_v2/lumenarium_tests.cpp @@ -6,6 +6,90 @@ thread_proc(Platform_Thread_Data* td) return {}; } +void +memory_allocator_tests(Allocator* a, bool run_free_tests) +{ + // TestGroup("Allocator Push") + { + for (u32 i = 0; i < 3; i++) + { + u8* buf0 = allocator_alloc(a, 256); + buf0[0] = 200; + buf0[255] = 199; + assert(buf0[0] == 200); + assert(buf0[255] == 199); + + u8* buf1 = allocator_alloc(a, 256); + buf1[0] = 201; + buf1[255] = 202; + assert(buf1 >= (buf0 + 256)); + assert(buf0[0] == 200); + assert(buf0[255] == 199); + assert(buf1[0] == 201); + assert(buf1[255] == 202); + + allocator_clear(a); + } + } + + // TestGroup("Allocator Free") + if (run_free_tests) + { + for (u32 i = 0; i < 3; i++) + { + u8* buf0 = allocator_alloc(a, KB(4)); + u8* buf1 = allocator_alloc(a, KB(4)); + u8* buf2 = allocator_alloc(a, KB(4)); + u8* buf3 = allocator_alloc(a, KB(4)); + u8* buf4 = allocator_alloc(a, KB(4)); + assert((buf1 - buf0) >= KB(4)); + assert((buf2 - buf0) >= KB(8)); + assert((buf3 - buf0) >= KB(12)); + assert((buf4 - buf0) >= KB(16)); + + allocator_free(a, buf1, KB(4)); + allocator_free(a, buf2, KB(4)); + u8* buf5 = allocator_alloc(a, KB(7)); + // buf5 should get put in the place of buf1 since buf1 and 2 get + // merged + assert(buf5 == buf1); + + allocator_free(a, buf4, KB(4)); + allocator_free(a, buf3, KB(4)); + allocator_free(a, buf0, KB(4)); + u8* buf6 = allocator_alloc(a, KB(4)); + assert(buf0 == buf6); + + allocator_clear(a); + } + } +} + +void +memory_tests() +{ + // TestGroup("Platform Allocation") + { + u8* base = platform_mem_reserve(GB(32)); + platform_mem_commit(base, KB(4)); + base[4095] = 200; + assert(base[4095] == 200); + platform_mem_commit(base + KB(4), KB(4)); + base[5000] = 200; + assert(base[5000] == 200); + platform_mem_decommit(base, KB(8)); + platform_mem_release(base, GB(32)); + } + + Allocator* bump = bump_allocator_create_reserve(KB(32)); + memory_allocator_tests(bump, false); + allocator_destroy(bump); + + Allocator* paged = paged_allocator_create_reserve(KB(32)); + memory_allocator_tests(paged, true); + allocator_destroy(paged); +} + internal void run_tests() { @@ -29,6 +113,8 @@ run_tests() assert(a1[i] == (100 + i)); } + memory_tests(); + #if defined(PLATFORM_wasm) // NOTE(PS): the tests below this point don't make sense on a web assembly // platform diff --git a/src_v2/lumenarium_texture_atlas.cpp b/src_v2/lumenarium_texture_atlas.cpp new file mode 100644 index 0000000..e56888f --- /dev/null +++ b/src_v2/lumenarium_texture_atlas.cpp @@ -0,0 +1,128 @@ +/* date = March 31st 2022 8:30 pm */ + +#ifndef LUMENARIUM_TEXTURE_ATLAS_CPP +#define LUMENARIUM_TEXTURE_ATLAS_CPP + +struct Texture_Atlas_Sprite +{ + u16 min_x; + u16 min_y; + u16 max_x; + u16 max_y; +}; + +struct Texture_Atlas +{ + u8* pixels; + u16 width; + u16 height; + + u16 next_x; + u16 next_y; + u16 y_used; + + u32* ids; + Texture_Atlas_Sprite* sprites; + u32 cap; + u32 used; +}; + +internal Texture_Atlas +texture_atlas_create(u32 width, u32 height, u32 cap, Allocator* allocator) +{ + Texture_Atlas result = {}; + result.pixels = allocator_alloc_array(allocator, u8, width * height * 4); + result.width = (u16)width; + result.height = (u16)height; + for (u32 i = 0; i < width * height; i++) { + u8* base = result.pixels + (i * 4); + *(u32*)base = 0xFFFFFFFF; + } + + result.ids = allocator_alloc_array(allocator, u32, cap); + result.sprites = allocator_alloc_array(allocator, Texture_Atlas_Sprite, cap); + result.cap = cap; + hash_table_init(result.ids, cap); + return result; +} + +internal void +texture_atlas_register(Texture_Atlas* ta, u8* pixels, u32 width, u32 height, u32 id) +{ + u16 min_x = ta->next_x; + u16 min_y = ta->next_y; + u16 max_x = min_x + (u16)width; + u16 max_y = min_y + (u16)height; + + // TODO(PS): if the sprite won't fit in this row, then we need to shift it to + // the next one + + // copy the data + for (u16 y = 0; y < height; y++) + { + u16 src_row = (y * (u16)width) * 4; + u16 dst_row = (((y + min_y) * ta->width) + min_x) * 4; + for (u16 x = 0; x < width; x++) + { + ta->pixels[dst_row++] = pixels[src_row++]; + ta->pixels[dst_row++] = pixels[src_row++]; + ta->pixels[dst_row++] = pixels[src_row++]; + ta->pixels[dst_row++] = pixels[src_row++]; + } + } + + // register a new slot + u32 index = hash_table_register(ta->ids, ta->cap, id); + + Texture_Atlas_Sprite* sprite = ta->sprites + index; + sprite->min_x = min_x; + sprite->min_y = min_y; + sprite->max_x = max_x; + sprite->max_y = max_y; + + // Prepare for next registration + if (max_y > ta->y_used) + { + ta->y_used = max_y; + } + + ta->next_x = max_x + 1; + if (ta->next_x > ta->width) + { + ta->next_x = 0; + ta->next_y = ta->y_used; + } +} + +internal Texture_Atlas_Sprite +texture_atlas_sprite_get(Texture_Atlas* ta, u32 id) +{ + Texture_Atlas_Sprite result = {}; + u32 index = hash_table_find(ta->ids, ta->cap, id); + if (index == ta->cap) return result; + result = ta->sprites[index]; + return result; +} + +internal v4 +texture_atlas_sprite_get_uvs(Texture_Atlas* ta, u32 id) +{ + Texture_Atlas_Sprite sprite = texture_atlas_sprite_get(ta, id); + v4 result = {}; + + // uv min + result.x = (r32)sprite.min_x / (r32)ta->width; + result.y = (r32)sprite.min_y / (r32)ta->height; + + // uv max + result.z = (r32)sprite.max_x / (r32)ta->width; + result.w = (r32)sprite.max_y / (r32)ta->height; + + // inset + v2 half_texel = v2{1.0f / ta->width, 1.0f / ta->height}; + result.xy += half_texel; + result.zw -= half_texel; + + return result; +} +#endif //LUMENARIUM_TEXTURE_ATLAS_CPP diff --git a/src_v2/lumenarium_types.h b/src_v2/lumenarium_types.h index e9eac22..d26977a 100644 --- a/src_v2/lumenarium_types.h +++ b/src_v2/lumenarium_types.h @@ -37,16 +37,149 @@ typedef s64 b64; typedef float r32; typedef double r64; +#define get_byte(value, byte_index) ((value >> (8 * byte_index)) & 0xFF) + struct Data { u8* base; u64 size; }; +internal Data +data_create(u8* base, u64 size) +{ + Data result = {}; + result.base = base; + result.size = size; + return result; +} + +internal void memory_zero(u8* base, u64 size); +internal void memory_copy(u8* from, u8* to, u64 size); + +////////////////////////////////////////////// +// String + +// NOTE(PS): even though this has a len and cap, it should always be +// null terminated +struct String +{ + u8* str; + u64 len; + u64 cap; +}; + +internal String string_create(u8* str, u64 len, u64 cap); +internal u64 string_copy_to(String* dest, String src); + +////////////////////////////////////////////// +// Data Writer + +struct Data_Writer +{ + Data data; + u64 at; +}; + +// NOTE(PS): functions ending in _b treat data in the Data_Writer as big endian +// order (network ordering) where functions ending in _l treat data into little +// endian order +// It is always assumed that values not in the Data_Writer (ie the other args +// to the function or the functions return value) are in little endian order + +internal void +dw_put_u8(Data_Writer* w, u8 b) +{ + if (w->at < w->data.size) + { + w->data.base[w->at++] = b; + } +} + +internal u8 +dw_get_u8(Data_Writer* w) +{ + u8 result = 0; + if (w->at < w->data.size) + { + result = w->data.base[w->at++]; + } + return result; +} + +internal void +dw_put_u16_b(Data_Writer* w, u16 b) +{ + dw_put_u8(w, get_byte(b, 1)); + dw_put_u8(w, get_byte(b, 0)); +} + +internal void +dw_put_u16_l(Data_Writer* w, u16 b) +{ + dw_put_u8(w, get_byte(b, 0)); + dw_put_u8(w, get_byte(b, 1)); +} + +internal void +dw_put_u32_b(Data_Writer* w, u32 b) +{ + dw_put_u8(w, get_byte(b, 3)); + dw_put_u8(w, get_byte(b, 2)); + dw_put_u8(w, get_byte(b, 1)); + dw_put_u8(w, get_byte(b, 0)); +} + +internal void +dw_put_u32_l(Data_Writer* w, u32 b) +{ + dw_put_u8(w, get_byte(b, 0)); + dw_put_u8(w, get_byte(b, 1)); + dw_put_u8(w, get_byte(b, 2)); + dw_put_u8(w, get_byte(b, 3)); +} + +internal void +dw_put_u64_b(Data_Writer* w, u64 b) +{ + dw_put_u8(w, get_byte(b, 7)); + dw_put_u8(w, get_byte(b, 6)); + dw_put_u8(w, get_byte(b, 5)); + dw_put_u8(w, get_byte(b, 4)); + dw_put_u8(w, get_byte(b, 3)); + dw_put_u8(w, get_byte(b, 2)); + dw_put_u8(w, get_byte(b, 1)); + dw_put_u8(w, get_byte(b, 0)); +} + +internal void +dw_put_u64_l(Data_Writer* w, u64 b) +{ + dw_put_u8(w, get_byte(b, 0)); + dw_put_u8(w, get_byte(b, 1)); + dw_put_u8(w, get_byte(b, 2)); + dw_put_u8(w, get_byte(b, 3)); + dw_put_u8(w, get_byte(b, 4)); + dw_put_u8(w, get_byte(b, 5)); + dw_put_u8(w, get_byte(b, 6)); + dw_put_u8(w, get_byte(b, 7)); +} + +internal void +dw_put_str(Data_Writer* w, String str) +{ + for (u64 i = 0; i < str.len; i++) + { + dw_put_u8(w, str.str[i]); + } +} + +// TODO(PS): get functions + #define Bytes(x) (x) #define KB(x) ((x) << 10) #define MB(x) ((x) << 20) -#define GB(x) ((x) << 30) +#define GB(x) (((u64)x) << 30) #define TB(x) (((u64)x) << 40) #define has_flag(data, flag) (((data) & (flag)) != 0) @@ -65,17 +198,66 @@ else { (last)->next = (ele); } \ // TODO(PS): Stack, Queue, DLL ops ////////////////////////////////////////////// -// String +// Hash Table +// +// Rather than define a data structure, to allow the most flexibility, +// this is just a set of functions that can be integrated into other +// routines. +// In general, they expect you to track a u32* of ids and a u32 capacity -// NOTE(PS): even though this has a len and cap, it should always be -// null terminated -struct String +internal void +hash_table_init(u32* ids, u32 cap) { - u8* str; - u64 len; - u64 cap; -}; + for (u32 i = 0; i < cap; i++) ids[i] = 0; +} + +internal u32 +hash_table_find_(u32* ids, u32 cap, u32 start_id, u32 target_value) +{ + u32 index = start_id % cap; + u32 start = index; + do { + if (ids[index] == target_value) break; + index = (index + 1) % cap; + } while (index != start); + return index; +} + +internal u32 +hash_table_register(u32* ids, u32 cap, u32 new_id) +{ + u32 index = hash_table_find_(ids, cap, new_id, 0); + if (ids[index] != 0) return cap; + ids[index] = new_id; + return index; +} + +internal u32 +hash_table_find(u32* ids, u32 cap, u32 value) +{ + u32 result = hash_table_find_(ids, cap, value, value); + if (ids[result] != value) return cap; + return result; +} + +////////////////////////////////////////////// +// Vector Extensions + +#define v2_to_v3(xy,z) v3{(xy).x, (xy).y, (z)} + +////////////////////////////////////////////// +// Color Constants + +#define WHITE_V4 v4{1,1,1,1} +#define BLACK_V4 v4{0,0,0,1} +#define RED_V4 v4{1,0,0,1} +#define GREEN_V4 v4{0,1,0,1} +#define BLUE_V4 v4{0,0,1,1} +#define YELLOW_V4 v4{1,1,0,1} +#define TEAL_V4 v4{0,1,1,1} +#define PINK_V4 v4{1,0,1,1} typedef struct Allocator Allocator; + #endif //LUMENARIUM_TYPES_H diff --git a/src_v2/platform/lumenarium_assert.h b/src_v2/platform/lumenarium_assert.h index 213d041..be84e78 100644 --- a/src_v2/platform/lumenarium_assert.h +++ b/src_v2/platform/lumenarium_assert.h @@ -34,7 +34,12 @@ WASM_EXTERN void wasm_assert_always(char* file, unsigned int file_len, unsigned #endif // defined(PLATFORM_WASM) #ifdef USE_ASSERTS -# define assert(c) if (!(c)) { err_write("Assert Hit: %s:%d\n", __FILE__, (u32)__LINE__); close_err_file(); assert_always; } +# define assert(c) \ +if (!(c)) { \ +err_write("Assert Hit: %s:%d\n", __FILE__, (u32)__LINE__); \ +close_err_file(); \ +assert_always; \ +} // useful for catching cases that you aren't sure you'll hit, but // want to be alerted when they happen diff --git a/src_v2/platform/lumenarium_platform.h b/src_v2/platform/lumenarium_platform.h index a96a830..0f50ddf 100644 --- a/src_v2/platform/lumenarium_platform.h +++ b/src_v2/platform/lumenarium_platform.h @@ -80,6 +80,148 @@ bool platform_file_write_all(Platform_File_Handle file_handle, Data file_data); String platform_get_exe_path(Allocator* allocator); bool platform_pwd_set(String path); +// For Cross Platform File Operations use these: + +typedef u32 Platform_File_Async_Job_Flags; +enum +{ + PlatformFileAsyncJob_Invalid = 0, + PlatformFileAsyncJob_Read = 1, + PlatformFileAsyncJob_Write = 2, + PlatformFileAsyncJob_InFlight = 4, + PlatformFileAsyncJob_Success = 8, + PlatformFileAsyncJob_Failed = 16, +}; + +struct Platform_File_Async_Job_Args +{ + String path; + Data data; + Platform_File_Async_Job_Flags flags; + u32 error; +}; + +typedef void Platform_File_Async_Cb(Platform_File_Async_Job_Args args); + +struct Platform_File_Async_Job +{ + Data job_memory; + Platform_File_Async_Job_Args args; + Platform_File_Async_Cb* cb; +}; + +global Allocator* platform_file_jobs_arena = 0; +#define PLATFORM_FILE_ASYNC_MAX_JOBS 32 +global Platform_File_Async_Job platform_file_async_jobs[PLATFORM_FILE_ASYNC_MAX_JOBS]; +global u32 platform_file_async_jobs_len = 0; + +void +platform_file_jobs_init() +{ + platform_file_jobs_arena = paged_allocator_create_reserve(MB(4), 256); +} + +bool +platform_file_async_job_add(Platform_File_Async_Job job) +{ + if (platform_file_async_jobs_len >= PLATFORM_FILE_ASYNC_MAX_JOBS) return false; + + // Copy data to job local memory + u64 size_needed = job.args.path.len + job.args.data.size + 1; + u8* job_mem = allocator_alloc(platform_file_jobs_arena, size_needed); + String job_path = string_create(job_mem, 0, job.args.path.len + 1); + u64 copied = string_copy_to(&job_path, job.args.path); + Data job_data = data_create(job_mem + job_path.cap + 1, size_needed - (job_path.cap + 1)); + memory_copy(job.args.data.base, job_data.base, job.args.data.size); + job.args.path = job_path; + job.args.data = job_data; + job.job_memory = data_create(job_mem, size_needed); + + platform_file_async_jobs[platform_file_async_jobs_len++] = job; + return true; +} + +Platform_File_Async_Job +platform_file_async_job_rem(u64 index) +{ + assert(index < platform_file_async_jobs_len); + Platform_File_Async_Job result = platform_file_async_jobs[index]; + + platform_file_async_jobs_len -= 1; + if (platform_file_async_jobs_len > 0) + { + u32 last_job = platform_file_async_jobs_len; + platform_file_async_jobs[index] = platform_file_async_jobs[last_job]; + } + + return result; +} + +bool +platform_file_async_read(String path, Platform_File_Async_Cb* cb) +{ + Platform_File_Async_Job job = {}; + job.args.path = path; + job.args.flags = ( + PlatformFileAsyncJob_Read | + PlatformFileAsyncJob_InFlight + ); + job.cb = cb; + bool result = platform_file_async_job_add(job); + return result; +} + +bool +platform_file_async_write(String path, Data data, Platform_File_Async_Cb* cb) +{ + Platform_File_Async_Job job = {}; + job.args.path = path; + job.args.data = data; + job.args.flags = ( + PlatformFileAsyncJob_Write | + PlatformFileAsyncJob_InFlight + ); + job.cb = cb; + bool result = platform_file_async_job_add(job); + return result; +} + +void +platform_file_async_job_complete(Platform_File_Async_Job* job) +{ + job->cb(job->args); + allocator_free(platform_file_jobs_arena, job->job_memory.base, job->job_memory.size); + if (has_flag(job->args.flags, PlatformFileAsyncJob_Write)) + { + allocator_free(platform_file_jobs_arena, job->args.data.base, job->args.data.size); + } +} + +void platform_file_async_work_on_job(Platform_File_Async_Job* job); + +void +platform_file_async_jobs_do_work(u64 max_jobs) +{ + u64 to_do = max_jobs; + if (max_jobs > platform_file_async_jobs_len) to_do = platform_file_async_jobs_len; + + Platform_File_Async_Job_Flags completed = ( + PlatformFileAsyncJob_Success | + PlatformFileAsyncJob_Failed + ); + + for (u64 i = to_do - 1; i < to_do; i--) + { + Platform_File_Async_Job* job = platform_file_async_jobs + i; + platform_file_async_work_on_job(job); + if (has_flag(job->args.flags, completed)) + { + platform_file_async_job_complete(job); + platform_file_async_job_rem(i); + } + } +} + typedef u32 Platform_Enum_Dir_Flags; enum { @@ -100,6 +242,7 @@ enum Platform_Window_Event_Kind WindowEvent_Invalid = 0, WindowEvent_MouseScroll, + WindowEvent_MouseMoved, WindowEvent_ButtonDown, WindowEvent_ButtonUp, WindowEvent_Char, @@ -299,6 +442,7 @@ struct Platform_Shader { u32 id; u32 attrs[PLATFORM_SHADER_MAX_ATTRS]; + u32 uniforms[PLATFORM_SHADER_MAX_ATTRS]; }; struct Platform_Geometry_Buffer @@ -306,6 +450,7 @@ struct Platform_Geometry_Buffer u32 buffer_id_vao; u32 buffer_id_vertices; u32 buffer_id_indices; + u32 vertices_len; u32 indices_len; }; @@ -329,16 +474,19 @@ void platform_frame_clear(); // Geometry Platform_Geometry_Buffer platform_geometry_buffer_create(r32* vertices, u32 vertices_len, u32* indices, u32 indices_len); Platform_Shader platform_shader_create( - String code_vert, String code_frag, String* attribs, u32 attribs_len + String code_vert, String code_frag, String* attribs, u32 attribs_len, String* uniforms, u32 uniforms_len ); +void platform_geometry_buffer_update(Platform_Geometry_Buffer* buffer, r32* verts, u32 verts_offset, u32 verts_len, u32* indices, u32 indices_offset, u32 indices_len); // Shaders void platform_geometry_bind(Platform_Geometry_Buffer geo); void platform_shader_bind(Platform_Shader shader); +void platform_geometry_draw(Platform_Geometry_Buffer geo, u32 indices); void platform_geometry_draw(Platform_Geometry_Buffer geo); void platform_vertex_attrib_pointer( Platform_Geometry_Buffer geo, Platform_Shader shader, u32 count, u32 attr_index, u32 stride, u32 offset ); +void platform_set_uniform(Platform_Shader shader, u32 index, m44 u); // Textures Platform_Texture platform_texture_create(u8* pixels, u32 width, u32 height, u32 stride); diff --git a/src_v2/platform/wasm/lumenarium_wasm_webgl.cpp b/src_v2/platform/wasm/lumenarium_wasm_webgl.cpp index 88be506..0d04110 100644 --- a/src_v2/platform/wasm/lumenarium_wasm_webgl.cpp +++ b/src_v2/platform/wasm/lumenarium_wasm_webgl.cpp @@ -20,8 +20,9 @@ typedef unsigned int GLsizei; // I resorted to hard coding these rather than passing them in because // passing them in didn't seem to be working. +#define GL_FALSE 0 +#define GL_TRUE 1 #define GL_TEXTURE_2D 0x0DE1 - #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_COLOR_BUFFER_BIT 0x00004000 @@ -68,6 +69,7 @@ WASM_EXTERN void glAttachShader(GLuint program, GLuint shader); WASM_EXTERN void glLinkProgram(GLuint program); WASM_EXTERN void glUseProgram(GLuint program); WASM_EXTERN GLuint glGetAttribLocation(GLuint program, const char* name, GLuint name_len); +WASM_EXTERN GLuint glGetUniformLocation(GLuint program, const char* name, u32 len); WASM_EXTERN void glVertexAttribPointer(GLuint attr, GLuint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); WASM_EXTERN void glEnableVertexAttribArray(GLuint index); WASM_EXTERN void glDrawElements(GLenum type, GLuint count, GLenum ele_type, void* indices); @@ -109,7 +111,7 @@ platform_geometry_buffer_create( Platform_Shader platform_shader_create( - String code_vert, String code_frag, String* attrs, GLuint attrs_len + String code_vert, String code_frag, String* attrs, GLuint attrs_len, String* uniforms, GLuint uniforms_len ){ Platform_Shader result = {}; @@ -139,6 +141,16 @@ platform_shader_create( } result.attrs[attrs_len] = PLATFORM_SHADER_ATTR_LAST; + assert(uniforms_len < PLATFORM_SHADER_MAX_ATTRS); + for (GLuint i = 0; i < uniforms_len; i++) + { + s32 len = (s32)uniforms[i].len; + result.uniforms[i] = glGetUniformLocation( + result.id, (char*)uniforms[i].str, uniforms[i].len + ); + } + result.uniforms[uniforms_len] = PLATFORM_SHADER_ATTR_LAST; + return result; } @@ -159,6 +171,19 @@ platform_shader_bind(Platform_Shader shader) } } +void +platform_set_uniform(Platform_Shader shader, u32 index, m44 u) +{ + glUniformMatrix4fv(shader.uniforms[index], 1, GL_FALSE, &u.Elements[0]); +} + +void +platform_geometry_draw( + Platform_Geometry_Buffer geo, u32 indices + ){ + glDrawElements(GL_TRIANGLES, indices, GL_UNSIGNED_INT, 0); +} + void platform_geometry_draw( Platform_Geometry_Buffer geo diff --git a/src_v2/platform/win32/lumenarium_first_win32.cpp b/src_v2/platform/win32/lumenarium_first_win32.cpp index d27f084..a18e2d3 100644 --- a/src_v2/platform/win32/lumenarium_first_win32.cpp +++ b/src_v2/platform/win32/lumenarium_first_win32.cpp @@ -7,6 +7,7 @@ #include #include "../../lumenarium_types.h" +#include "../../lumenarium_memory.h" #include "../lumenarium_platform.h" #include "../../lumenarium_first.cpp" @@ -215,6 +216,20 @@ WinMain( lumenarium_event(evt, state); } + // Get the position of the mouse every frame + { + POINT mouse_p; + GetCursorPos(&mouse_p); + ScreenToClient(win32_main_window.window_handle, &mouse_p); + + Platform_Window_Event evt = {}; + evt.kind = WindowEvent_MouseMoved; + evt.mouse_x = mouse_p.x; + evt.mouse_y = mouse_p.y; + + lumenarium_event(evt, state); + } + // Pass Window Events to the runtime MSG window_msg; while (PeekMessageA( diff --git a/src_v2/platform/win32/lumenarium_win32_file.cpp b/src_v2/platform/win32/lumenarium_win32_file.cpp index 344e785..6db4fc4 100644 --- a/src_v2/platform/win32/lumenarium_win32_file.cpp +++ b/src_v2/platform/win32/lumenarium_win32_file.cpp @@ -256,3 +256,36 @@ platform_pwd_set(String path) if (!result) win32_get_last_error(); return result; } + +void +platform_file_async_work_on_job(Platform_File_Async_Job* job) +{ + Platform_File_Handle file = {}; + if (has_flag(job->args.flags, PlatformFileAsyncJob_Read)) + { + file = platform_file_open(job->args.path, FileAccess_Read, FileCreate_OpenExisting); + Data result = platform_file_read_all(file, platform_file_jobs_arena); + if (result.base != 0) + { + job->args.data = result; + add_flag(job->args.flags, PlatformFileAsyncJob_Success); + } + else + { + add_flag(job->args.flags, PlatformFileAsyncJob_Failed); + } + } + else if (has_flag(job->args.flags, PlatformFileAsyncJob_Write)) + { + file = platform_file_open(job->args.path, FileAccess_Write, FileCreate_OpenAlways); + if (platform_file_write_all(file, job->args.data)) + { + add_flag(job->args.flags, PlatformFileAsyncJob_Success); + } + else + { + add_flag(job->args.flags, PlatformFileAsyncJob_Failed); + } + } + platform_file_close(file); +} \ No newline at end of file diff --git a/src_v2/platform/win32/lumenarium_win32_graphics.cpp b/src_v2/platform/win32/lumenarium_win32_graphics.cpp index 848d91d..cc9bd19 100644 --- a/src_v2/platform/win32/lumenarium_win32_graphics.cpp +++ b/src_v2/platform/win32/lumenarium_win32_graphics.cpp @@ -39,6 +39,7 @@ platform_geometry_buffer_create( GL_ARRAY_BUFFER, sizeof(r32) * vertices_len, vertices, GL_STATIC_DRAW ); win32_gl_no_error(); + result.vertices_len = vertices_len; // Indices gl.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, result.buffer_id_indices); @@ -56,9 +57,61 @@ platform_geometry_buffer_create( return result; } +void platform_geometry_buffer_update( + Platform_Geometry_Buffer* buffer, + r32* verts, + u32 verts_offset, + u32 verts_len, + u32* indices, + u32 indices_offset, + u32 indices_len + ){ + gl.glBindVertexArray(buffer->buffer_id_vao); + gl.glBindBuffer(GL_ARRAY_BUFFER, buffer->buffer_id_vertices); + win32_gl_no_error(); + + if (verts_len > buffer->vertices_len) + { + // NOTE(PS): this is because we're going to delete the old buffer and + // create a new one. In order to do that and not lose data, the update + // function needs to have been passed all the buffer's data + assert(verts_offset == 0); + gl.glBufferData( + GL_ARRAY_BUFFER, verts_len * sizeof(r32), (void*)verts, GL_STATIC_DRAW + ); + } + else + { + gl.glBufferSubData( + GL_ARRAY_BUFFER, verts_offset * sizeof(r32), verts_len * sizeof(r32), (void*)verts + ); + } + win32_gl_no_error(); + + gl.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer->buffer_id_indices); + win32_gl_no_error(); + if (indices_len > buffer->indices_len) + { + // NOTE(PS): this is because we're going to delete the old buffer and + // create a new one. In order to do that and not lose data, the update + // function needs to have been passed all the buffer's data + assert(indices_offset == 0); + gl.glBufferData( + GL_ELEMENT_ARRAY_BUFFER, indices_len * sizeof(u32), (void*)indices, GL_STATIC_DRAW + ); + } + else + { + gl.glBufferSubData( + GL_ELEMENT_ARRAY_BUFFER, indices_offset * sizeof(u32), indices_len * sizeof(u32), (void*)indices + ); + } + win32_gl_no_error(); +} + Platform_Shader platform_shader_create( - String code_vert, String code_frag, String* attrs, u32 attrs_len + String code_vert, String code_frag, String* attrs, u32 attrs_len, String* uniforms, u32 uniforms_len ){ Platform_Shader result = {}; @@ -117,12 +170,29 @@ platform_shader_create( result.attrs[i] = gl.glGetAttribLocation( result.id, (char*)attrs[i].str ); + win32_gl_no_error(); } result.attrs[attrs_len] = PLATFORM_SHADER_ATTR_LAST; + assert(uniforms_len < PLATFORM_SHADER_MAX_ATTRS); + for (GLuint i = 0; i < uniforms_len; i++) + { + s32 len = (s32)uniforms[i].len; + result.uniforms[i] = gl.glGetUniformLocation( + result.id, (char*)uniforms[i].str + ); + } + result.uniforms[uniforms_len] = PLATFORM_SHADER_ATTR_LAST; + return result; } +void +platform_set_uniform(Platform_Shader shader, u32 index, m44 u) +{ + gl.glUniformMatrix4fv(shader.uniforms[index], 1, GL_FALSE, (r32*)u.Elements); +} + void platform_geometry_bind(Platform_Geometry_Buffer geo) { @@ -150,12 +220,19 @@ platform_shader_bind(Platform_Shader shader) } } +void +platform_geometry_draw( + Platform_Geometry_Buffer geo, u32 indices + ){ + glDrawElements(GL_TRIANGLES, indices, GL_UNSIGNED_INT, 0); + win32_gl_no_error(); +} + void platform_geometry_draw( Platform_Geometry_Buffer geo ){ - glDrawElements(GL_TRIANGLES, geo.indices_len, GL_UNSIGNED_INT, 0); - win32_gl_no_error(); + platform_geometry_draw(geo, geo.indices_len); } void platform_vertex_attrib_pointer( diff --git a/src_v2/platform/win32/lumenarium_win32_memory.cpp b/src_v2/platform/win32/lumenarium_win32_memory.cpp index 8a82089..3c39c44 100644 --- a/src_v2/platform/win32/lumenarium_win32_memory.cpp +++ b/src_v2/platform/win32/lumenarium_win32_memory.cpp @@ -5,7 +5,7 @@ u64 platform_page_size() { return WIN32_PAGE_SIZE; } u8* platform_mem_reserve(u64 size) { - size_t size_cvt = (size_t)size_to_pages(size); + size_t size_cvt = (size_t)round_size_to_page_multiple(size); DWORD alloc_type = MEM_RESERVE; DWORD protection = PAGE_READWRITE; u8* result = (u8*)VirtualAlloc(0, size_cvt, alloc_type, protection); @@ -16,7 +16,7 @@ platform_mem_reserve(u64 size) u8* platform_mem_commit(u8* base, u64 size) { - size_t size_cvt = (size_t)size_to_pages(size); + size_t size_cvt = (size_t)round_size_to_page_multiple(size); DWORD alloc_type = MEM_COMMIT; DWORD protection = PAGE_READWRITE; u8* result = (u8*)VirtualAlloc(base, size_cvt, alloc_type, protection); @@ -37,7 +37,9 @@ bool platform_mem_release(u8* base, u64 size) { DWORD free_type = MEM_RELEASE; - bool result = VirtualFree(base, size, free_type); + // according to the docs, if we're releasing memory, the size must be + // zero as its implied VirtualFree will free the entire region + bool result = VirtualFree(base, 0, free_type); if (!result) win32_get_last_error(); return result; } diff --git a/src_v2/platform/win32/lumenarium_win32_opengl.h b/src_v2/platform/win32/lumenarium_win32_opengl.h index 9ad2cee..29526bb 100644 --- a/src_v2/platform/win32/lumenarium_win32_opengl.h +++ b/src_v2/platform/win32/lumenarium_win32_opengl.h @@ -17,6 +17,7 @@ typedef void proc_glBindVertexArray(GLuint array); typedef void proc_glGenBuffers (GLsizei n, GLuint *buffers); typedef void proc_glBindBuffer(GLenum target, GLuint buffer); typedef void proc_glBufferData(GLenum target, size_t size, const void *data, GLenum usage); +typedef void proc_glBufferSubData(GLenum target, size_t offset, size_t size, const void* data); typedef GLuint proc_glCreateShader(GLenum type); typedef void proc_glShaderSource(GLuint shader, u32 count, const char* const* string, const GLint *length); typedef void proc_glCompileShader(GLuint shader); @@ -31,7 +32,8 @@ typedef void proc_glGetShaderiv(GLuint shader, GLenum ele, GLint* value_out); typedef void proc_glGetShaderInfoLog(GLuint shader, GLuint buf_len, GLsizei* len_out, GLchar* buf); typedef void proc_glGetProgramiv(GLuint program, GLenum ele, GLint* value_out); typedef void proc_glGetProgramInfoLog(GLuint program, GLuint cap, GLsizei* len_out, GLchar* buf); - +typedef GLuint proc_glGetUniformLocation(GLuint program, const char* name); +typedef void proc_glUniformMatrix4fv(GLuint uniform, GLuint count, GLenum normalize, GLfloat* elements); struct Win32_OpenGL_Extensions { proc_wglGetExtensionsStringARB* wglGetExtensionsStringARB; @@ -43,6 +45,7 @@ struct Win32_OpenGL_Extensions proc_glGenBuffers* glGenBuffers; proc_glBindBuffer* glBindBuffer; proc_glBufferData* glBufferData; + proc_glBufferSubData* glBufferSubData; proc_glCreateShader* glCreateShader; proc_glShaderSource* glShaderSource; proc_glCompileShader* glCompileShader; @@ -57,6 +60,8 @@ struct Win32_OpenGL_Extensions proc_glGetShaderInfoLog* glGetShaderInfoLog; proc_glGetProgramiv* glGetProgramiv; proc_glGetProgramInfoLog* glGetProgramInfoLog; + proc_glGetUniformLocation* glGetUniformLocation; + proc_glUniformMatrix4fv* glUniformMatrix4fv; }; //////////////////////////////////////// diff --git a/src_v2/platform/win32/lumenarium_win32_window.cpp b/src_v2/platform/win32/lumenarium_win32_window.cpp index 54ca09f..bc5030c 100644 --- a/src_v2/platform/win32/lumenarium_win32_window.cpp +++ b/src_v2/platform/win32/lumenarium_win32_window.cpp @@ -381,6 +381,7 @@ win32_window_opengl_get_wgl_ext(HINSTANCE hinstance) wgl_load_ext(result, glGenBuffers); wgl_load_ext(result, glBindBuffer); wgl_load_ext(result, glBufferData); + wgl_load_ext(result, glBufferSubData); wgl_load_ext(result, glCreateShader); wgl_load_ext(result, glShaderSource); wgl_load_ext(result, glCompileShader); @@ -395,6 +396,8 @@ win32_window_opengl_get_wgl_ext(HINSTANCE hinstance) wgl_load_ext(result, glGetShaderInfoLog); wgl_load_ext(result, glGetProgramiv); wgl_load_ext(result, glGetProgramInfoLog); + wgl_load_ext(result, glGetUniformLocation); + wgl_load_ext(result, glUniformMatrix4fv); } wglMakeCurrent(NULL, NULL); diff --git a/src_v2/user_space/user_space_incenter.cpp b/src_v2/user_space/user_space_incenter.cpp index 180161b..124f476 100644 --- a/src_v2/user_space/user_space_incenter.cpp +++ b/src_v2/user_space/user_space_incenter.cpp @@ -10,8 +10,6 @@ incenter_get_init_desc() internal void incenter_init(App_State* state) { - return; - // create a fake sculpture Assembly_Handle ah = assembly_add(&state->assemblies, lit_str("test"), 3000, 100);