volviewer

Volumetric Data Toy Viewer
git clone anongit@rnpnr.xyz:volviewer.git
Log | Files | Refs | Feed | LICENSE

Commit: 2549a3bb8ff1f70b45d2da797ea1494f2c254074
Parent: d50d8016be03b09434515b89b40e9671ed8fe4a1
Author: Randy Palamar
Date:   Mon, 26 May 2025 06:32:56 -0600

bake unit cube into source code

Diffstat:
Mcommon.c | 112++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
1 file changed, 94 insertions(+), 18 deletions(-)

diff --git a/common.c b/common.c @@ -227,37 +227,34 @@ load_complex_texture(Arena arena, c8 *file_path, b32 multi_file, u32 width, u32 } function RenderModel -load_render_model(Arena arena, c8 *positions_file_name, c8 *indices_file_name, c8 *normals_file_name) +render_model_from_arrays(f32 *vertices, f32 *normals, u16 *indices, u32 index_count) { RenderModel result = {0}; - str8 positions = os_read_whole_file(&arena, positions_file_name); - str8 normals = os_read_whole_file(&arena, normals_file_name); - str8 indices = os_read_whole_file(&arena, indices_file_name); - - result.elements = indices.len / sizeof(u16); + s32 buffer_size = index_count * (6 * sizeof(f32) + sizeof(u16)); + s32 indices_offset = index_count * (6 * sizeof(f32)); + s32 vert_size = index_count * 3 * sizeof(f32); + s32 ind_size = index_count * sizeof(u16); - s32 buffer_size = positions.len + indices.len + normals.len; - - s32 el_offset = positions.len + normals.len; - result.elements_offset = el_offset; + result.elements = index_count; + result.elements_offset = indices_offset; glCreateBuffers(1, &result.buffer); glNamedBufferStorage(result.buffer, buffer_size, 0, GL_DYNAMIC_STORAGE_BIT); - glNamedBufferSubData(result.buffer, 0, positions.len, positions.data); - glNamedBufferSubData(result.buffer, positions.len, normals.len, normals.data); - glNamedBufferSubData(result.buffer, el_offset, indices.len, indices.data); + glNamedBufferSubData(result.buffer, 0, vert_size, vertices); + glNamedBufferSubData(result.buffer, vert_size, vert_size, normals); + glNamedBufferSubData(result.buffer, indices_offset, ind_size, indices); glCreateVertexArrays(1, &result.vao); - glVertexArrayVertexBuffer(result.vao, 0, result.buffer, 0, 3 * sizeof(f32)); - glVertexArrayVertexBuffer(result.vao, 1, result.buffer, positions.len, 3 * sizeof(f32)); + glVertexArrayVertexBuffer(result.vao, 0, result.buffer, 0, 3 * sizeof(f32)); + glVertexArrayVertexBuffer(result.vao, 1, result.buffer, vert_size, 3 * sizeof(f32)); glVertexArrayElementBuffer(result.vao, result.buffer); glEnableVertexArrayAttrib(result.vao, 0); glEnableVertexArrayAttrib(result.vao, 1); glVertexArrayAttribFormat(result.vao, 0, 3, GL_FLOAT, 0, 0); - glVertexArrayAttribFormat(result.vao, 1, 3, GL_FLOAT, 0, positions.len); + glVertexArrayAttribFormat(result.vao, 1, 3, GL_FLOAT, 0, vert_size); glVertexArrayAttribBinding(result.vao, 0, 0); glVertexArrayAttribBinding(result.vao, 1, 0); @@ -265,6 +262,18 @@ load_render_model(Arena arena, c8 *positions_file_name, c8 *indices_file_name, c return result; } +function RenderModel +load_render_model(Arena arena, c8 *positions_file_name, c8 *indices_file_name, c8 *normals_file_name) +{ + str8 positions = os_read_whole_file(&arena, positions_file_name); + str8 normals = os_read_whole_file(&arena, normals_file_name); + str8 indices = os_read_whole_file(&arena, indices_file_name); + + RenderModel result = render_model_from_arrays((f32 *)positions.data, (f32 *)normals.data, + (u16 *)indices.data, indices.len / sizeof(u16)); + return result; +} + function void scroll_callback(GLFWwindow *window, f64 x, f64 y) { @@ -485,8 +494,75 @@ init_viewer(ViewerContext *ctx) reload_shader(&ctx->os, render_overlay, (sptr)overlay_rc, ctx->arena); os_add_file_watch(&ctx->os, &ctx->arena, render_overlay, reload_shader, (sptr)overlay_rc); - ctx->unit_cube = load_render_model(ctx->arena, "unit_cube_positions.bin", - "unit_cube_indices.bin", "unit_cube_normals.bin"); + f32 unit_cube_vertices[] = { + 1.0f, 1.0f, -1.0f, + 1.0f, 1.0f, -1.0f, + 1.0f, 1.0f, -1.0f, + 1.0f, -1.0f, -1.0f, + 1.0f, -1.0f, -1.0f, + 1.0f, -1.0f, -1.0f, + 1.0f, 1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, + 1.0f, -1.0f, 1.0f, + 1.0f, -1.0f, 1.0f, + 1.0f, -1.0f, 1.0f, + -1.0f, 1.0f, -1.0f, + -1.0f, 1.0f, -1.0f, + -1.0f, 1.0f, -1.0f, + -1.0f, -1.0f, -1.0f, + -1.0f, -1.0f, -1.0f, + -1.0f, -1.0f, -1.0f, + -1.0f, 1.0f, 1.0f, + -1.0f, 1.0f, 1.0f, + -1.0f, 1.0f, 1.0f, + -1.0f, -1.0f, 1.0f, + -1.0f, -1.0f, 1.0f, + -1.0f, -1.0f, 1.0f + }; + f32 unit_cube_normals[] = { + 0.0f, 0.0f, -1.0f, + 0.0f, 1.0f, 0.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, -1.0f, + 0.0f, -1.0f, 0.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, + 0.0f, 1.0f, 0.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, + 0.0f, -1.0f, 0.0f, + 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, -1.0f, + 0.0f, 1.0f, 0.0f, + -1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, -1.0f, + 0.0f, -1.0f, 0.0f, + -1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, + 0.0f, 1.0f, 0.0f, + -1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, + 0.0f, -1.0f, 0.0f, + -1.0f, 0.0f, 0.0f + }; + u16 unit_cube_indices[] = { + 1, 13, 19, + 1, 19, 7, + 9, 6, 18, + 9, 18, 21, + 23, 20, 14, + 23, 14, 17, + 16, 4, 10, + 16, 10, 22, + 5, 2, 8, + 5, 8, 11, + 15, 12, 0, + 15, 0, 3 + }; + + ctx->unit_cube = render_model_from_arrays(unit_cube_vertices, unit_cube_normals, + unit_cube_indices, countof(unit_cube_indices)); } function void