From 05ecad8f56847557f4d3d471b8c99a6cf03238c5 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Tue, 18 Jun 2024 17:24:07 -0400 Subject: [PATCH] sokol gp rectangle demo works! --- code/sectr/engine/client_api.odin | 66 ++++++------------- ..._testing_text.odin => render_testing.odin} | 49 ++++++++++++-- 2 files changed, 64 insertions(+), 51 deletions(-) rename code/sectr/engine/{render_testing_text.odin => render_testing.odin} (87%) diff --git a/code/sectr/engine/client_api.odin b/code/sectr/engine/client_api.odin index fb8fab7..25f1911 100644 --- a/code/sectr/engine/client_api.odin +++ b/code/sectr/engine/client_api.odin @@ -11,9 +11,10 @@ import "core:strings" import "core:time" import "core:prof/spall" -import sokol_app "thirdparty:sokol/app" -import sokol_gfx "thirdparty:sokol/gfx" -import sokol_app_gfx_glue "thirdparty:sokol/glue" +import sokol_app "thirdparty:sokol/app" +import sokol_gfx "thirdparty:sokol/gfx" +import sokol_glue "thirdparty:sokol/glue" +import sokol_gp "thirdparty:sokol/gp" Path_Assets :: "../assets/" Path_Shaders :: "../shaders/" @@ -205,7 +206,7 @@ startup :: proc( prof : ^SpallProfiler, persistent_mem, frame_mem, transient_mem // Setup sokol_gfx { - glue_env := sokol_app_gfx_glue.environment() + glue_env := sokol_glue.environment() desc := sokol_gfx.Desc { buffer_pool_size = 128, @@ -236,51 +237,19 @@ startup :: proc( prof : ^SpallProfiler, persistent_mem, frame_mem, transient_mem case .DUMMY: logf("sokol_gfx: using dummy backend") } - // Learning examples - { - - debug.gfx_clear_demo_pass_action.colors[0] = { - load_action = .CLEAR, - clear_value = { 1, 0, 0, 1 } - } - triangle_vertices := [?]f32 { - // positions // colors - 0.0, 0.5, 0.5, 1.0, 0.0, 0.0, 1.0, - 0.5, -0.5, 0.5, 0.0, 1.0, 0.0, 1.0, - -0.5, -0.5, 0.5, 0.0, 0.0, 1.0, 1.0, - } - - tri_shader_attr_vs_position :: 0 - tri_shader_attr_vs_color0 :: 1 - - using debug.gfx_tri_demo_state - bindings.vertex_buffers[0] = sokol_gfx.make_buffer( sokol_gfx.Buffer_Desc { - data = { - ptr = & triangle_vertices, - size = size_of(triangle_vertices) - } - }) - pipeline = sokol_gfx.make_pipeline( sokol_gfx.Pipeline_Desc { - shader = sokol_gfx.make_shader( triangle_shader_desc(backend)), - layout = sokol_gfx.Vertex_Layout_State { - attrs = { - tri_shader_attr_vs_position = { format = .FLOAT3 }, - tri_shader_attr_vs_color0 = { format = .FLOAT4 }, - } - } - }) - pass_action.colors[0] = { - load_action = .CLEAR, - clear_value = { 0, 0, 0, 1 } - } - - render_data.pass_actions.bg_clear_black.colors[0] = sokol_gfx.Color_Attachment_Action { - load_action = .CLEAR, - clear_value = { 0, 0, 0, 1 } - } + render_data.pass_actions.bg_clear_black.colors[0] = sokol_gfx.Color_Attachment_Action { + load_action = .CLEAR, + clear_value = { 0, 0, 0, 1 } } } + // Setup sokol_gp + { + desc := sokol_gp.Desc {} + sokol_gp.setup(desc) + verify( cast(b32) sokol_gp.is_valid(), "Failed to setup sokol gp (graphics painter)" ) + } + // Basic Font Setup if true { @@ -389,6 +358,8 @@ sectr_shutdown :: proc() // font_provider_shutdown() + sokol_gp.shutdown() + sokol_gfx.shutdown() sokol_app.post_client_cleanup() log("Module shutdown complete") @@ -444,6 +415,9 @@ hot_reload :: proc( prof : ^SpallProfiler, persistent_mem, frame_mem, transient_ slab_reload( persistent_slab, persistent_allocator() ) + // input_reload() + + // font_provider_reload() hmap_chained_reload( font_provider_data.font_cache, persistent_allocator()) str_cache_reload( & string_cache, persistent_allocator(), persistent_allocator() ) diff --git a/code/sectr/engine/render_testing_text.odin b/code/sectr/engine/render_testing.odin similarity index 87% rename from code/sectr/engine/render_testing_text.odin rename to code/sectr/engine/render_testing.odin index 35892c1..9ca88ac 100644 --- a/code/sectr/engine/render_testing_text.odin +++ b/code/sectr/engine/render_testing.odin @@ -1,10 +1,13 @@ package sectr +import "core:math" +import "core:time" + import ve "codebase:font/VEFontCache" import sokol_app "thirdparty:sokol/app" import sokol_gfx "thirdparty:sokol/gfx" import sokol_glue "thirdparty:sokol/glue" -import "core:time" +import sokol_gp "thirdparty:sokol/gp" PassActions :: struct { bg_clear_black : sokol_gfx.Pass_Action, @@ -78,6 +81,44 @@ render :: proc() sokol_gfx.commit() } + width := app_window.extent.x * 2 + height := app_window.extent.y * 2 + + profile_begin("sokol_gp demo pass") + // Hello Sokol GP Demo + { + screen_ratio := width * (1.0 / height) + + sokol_gp.begin(i32(width), i32(height)) + + sokol_gp.viewport(0, 0, i32(width), i32(height)) + sokol_gp.project(-screen_ratio, screen_ratio, 1.0, -1.0) + + sokol_gp.set_color(0.1, 0.1, 0.1, 1.0) + sokol_gp.clear() + + // Draw animated rectangle box that rotates and changes colors + time := f32(f64(sokol_app.frame_count()) * sokol_app.frame_duration()) + + red := math.sin(time) * 0.5 + 0.5 + green := math.cos(time) * 0.5 + 0.5 + + sokol_gp.set_color(red, green, 0.3, 1.0) + sokol_gp.rotate_at(time, 0.0, 0.0) + sokol_gp.draw_filled_rect(-0.5, -0.5, 1.0, 1.0) + } + + // Process sokol gp render depth pass + { + sokol_gfx.begin_pass( sokol_gfx.Pass { action = {}, swapchain = sokol_glue.swapchain() }) + + sokol_gp.flush() + sokol_gp.end() + + sokol_gfx.end_pass() + } + profile_end() + // "Draw text" using immediate mode api { @static index : i32 @@ -89,8 +130,6 @@ render :: proc() // font_provider := & state.font_provider_data fdef := hmap_chained_get( font_cache, default_font.key ) - width := app_window.extent.x * 2 - height := app_window.extent.y * 2 ve.set_colour( & ve_font_cache, { 1.0, 1.0, 1.0, 1.0 } ) ve.configure_snap( & ve_font_cache, u32(state.app_window.extent.x * 2.0), u32(state.app_window.extent.y * 2.0) ) @@ -99,8 +138,8 @@ render :: proc() } - sokol_gfx.begin_pass(sokol_gfx.Pass { action = pass_actions.bg_clear_black, swapchain = sokol_glue.swapchain() }) - sokol_gfx.end_pass(); + // sokol_gfx.begin_pass(sokol_gfx.Pass { action = pass_actions.bg_clear_black, swapchain = sokol_glue.swapchain() }) + // sokol_gfx.end_pass(); // Process the draw calls for drawing text if true