diff options
Diffstat (limited to 'render.ha')
-rw-r--r-- | render.ha | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/render.ha b/render.ha new file mode 100644 index 0000000..9754936 --- /dev/null +++ b/render.ha @@ -0,0 +1,94 @@ +use gl::*; +use glm; +use glw; +use math; +use sdl2::*; +use time; +use trace; + +type Vertex = struct { + position: [3]u16, + normal: [3]i8, + texcoord: [2]u16, + flags: u8, +}; + +type VertexFlags = enum u8 { + U_EXCL = 1 << 0, + V_EXCL = 1 << 1, +}; + +fn render_init(assets: *Pack) void = { + const t = time::now(time::clock::MONOTONIC); + const u = time::now(time::clock::PROCESS_CPU); + load_textures(assets); + trace::debug(&trace::root, "texture loading took rt {} ms / cpu {} ms", + time::diff(t, time::now(time::clock::MONOTONIC)) / 1000000, + time::diff(u, time::now(time::clock::PROCESS_CPU)) / 1000000); + + const t = time::now(time::clock::MONOTONIC); + const u = time::now(time::clock::PROCESS_CPU); + load_atlases(assets); + trace::debug(&trace::root, "atlas loading took rt {} ms / cpu {} ms", + time::diff(t, time::now(time::clock::MONOTONIC)) / 1000000, + time::diff(u, time::now(time::clock::PROCESS_CPU)) / 1000000); + + const t = time::now(time::clock::MONOTONIC); + const u = time::now(time::clock::PROCESS_CPU); + load_fonts(assets); + trace::debug(&trace::root, "font loading took rt {} ms / cpu {} ms", + time::diff(t, time::now(time::clock::MONOTONIC)) / 1000000, + time::diff(u, time::now(time::clock::PROCESS_CPU)) / 1000000); + + const t = time::now(time::clock::MONOTONIC); + const u = time::now(time::clock::PROCESS_CPU); + load_models(assets); + trace::debug(&trace::root, "model loading took rt {} ms / cpu {} ms", + time::diff(t, time::now(time::clock::MONOTONIC)) / 1000000, + time::diff(u, time::now(time::clock::PROCESS_CPU)) / 1000000); + + const t = time::now(time::clock::MONOTONIC); + const u = time::now(time::clock::PROCESS_CPU); + load_render_bstates(assets); + trace::debug(&trace::root, "render bstate loading took rt {} ms / cpu {} ms", + time::diff(t, time::now(time::clock::MONOTONIC)) / 1000000, + time::diff(u, time::now(time::clock::PROCESS_CPU)) / 1000000); + + const t = time::now(time::clock::MONOTONIC); + const u = time::now(time::clock::PROCESS_CPU); + shaders_init(); + trace::debug(&trace::root, "shader loading took rt {} ms / cpu {} ms", + time::diff(t, time::now(time::clock::MONOTONIC)) / 1000000, + time::diff(u, time::now(time::clock::PROCESS_CPU)) / 1000000); + + hud_load(); +}; + +fn render_destroy() void = { + // TODO: + // shaders_finish(); + // render_bstates_finish(); + // models_finish(); + // atlases_finish(); + finish_textures(); +}; + +fn render_wait_screen(text: str) void = { + let (width, height) = drawable_size(); + glViewport(0, 0, width: i32, height: i32); + + let gui_width = width / gui_scale(); + let gui_height = height / gui_scale(); + + glClearColor(0.0, 0.0, 0.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + const font = fonts_find("minecraft:default") as *Font; + const metrics = font_measure(font, text); + const text_trans = glm::translation_make(&[ + (gui_width: f32 - metrics.width) / 2.0, + gui_height: f32 / 2.0, + 0.0]); + const text_trans = glm::m4_mul(gui_proj(), &text_trans); + render_text_shadow(text, font, &text_trans, [255...]); +}; |