From bfc70b2a500e2561282d9b85f58953d2e773dde2 Mon Sep 17 00:00:00 2001 From: caiowakamatsu Date: Tue, 7 Apr 2026 01:17:01 -0300 Subject: [PATCH] some more stuff with imgui integration --- assets/shaders/composite.slang | 2 +- source/game/engine.cpp | 35 ++++++++++++++++++++++++++++++---- source/game/engine.hpp | 11 +++++++++++ source/render/renderer.cpp | 20 +++++++++---------- source/render/renderer.hpp | 3 +++ 5 files changed, 55 insertions(+), 16 deletions(-) diff --git a/assets/shaders/composite.slang b/assets/shaders/composite.slang index b23c0ef..44882b2 100644 --- a/assets/shaders/composite.slang +++ b/assets/shaders/composite.slang @@ -28,6 +28,6 @@ float4 frag_main(post_transform_vertex input) : SV_Target { let lighting = max(sun_contribution, ambient_contribution); let game = lighting * albedo; - let gui = ui.xyz; + let gui = pow(ui.xyz, float3(2.2f)); return float4(lerp(game, gui, ui.w), 1.0f); } diff --git a/source/game/engine.cpp b/source/game/engine.cpp index 857b897..e71a8bb 100644 --- a/source/game/engine.cpp +++ b/source/game/engine.cpp @@ -358,6 +358,28 @@ glm::mat4 engine::transform_given_coordinate(glm::uvec2 coordinate) const { return glm::translate(glm::mat4(1.0f), glm::vec3(world_x, 0.0f, world_z)); } +void engine::do_level_editor_ui() { + if (!debug_drawing.level_editor) { + return; + } + + ImGui::Begin("Level Editor"); + + ImGui::Checkbox("Enabled", &is_editing_level); + + ImGui::End(); +} + +void engine::do_debug_ui() { + ImGui::Begin("Debug"); + + ImGui::Checkbox("Playing Bounds", &debug_drawing.playing_bounds); + ImGui::Checkbox("Individual Tiles", &debug_drawing.individual_tiles); + ImGui::Checkbox("Level Editor", &debug_drawing.level_editor); + + ImGui::End(); +} + engine::engine() : display(&input, {1920, 1080}, "Tanks Reborn"), renderer(&display), models(load_models("../assets/models")), @@ -375,9 +397,11 @@ void engine::run() { const auto [map_min, map_max] = ::bounds_of(models.boundary); const auto [view, projection] = ::calculate_camera_matrices( map_min, map_max, 1920.0f / 1080.0f, 3.0f); - //, true, 3.0f); - //, - // true, glfwGetTime()); + + renderer.do_ui([this] { + do_level_editor_ui(); + do_debug_ui(); + }); auto request = render::request(); @@ -385,7 +409,10 @@ void engine::run() { if (current_level.has_value()) { request = add_level_to_render_request(request, &(*current_level)); } - request = add_playing_bounds_to_render_request(request); + + if (debug_drawing.playing_bounds) { + request = add_playing_bounds_to_render_request(request); + } renderer.render(request, view, projection); } catch (const vuk::VkException &ex) { diff --git a/source/game/engine.hpp b/source/game/engine.hpp index 97ba130..294065f 100644 --- a/source/game/engine.hpp +++ b/source/game/engine.hpp @@ -43,6 +43,13 @@ private: map_boxes box_entities; std::optional current_level = level(); + bool is_editing_level = false; + struct { + bool playing_bounds = false; + bool individual_tiles = false; + bool level_editor = false; + } debug_drawing; + // std::nullopt; [[nodiscard]] static game_models @@ -76,6 +83,10 @@ private: [[nodiscard]] glm::mat4 transform_given_coordinate(glm::uvec2 coordinate) const; + void do_level_editor_ui(); + + void do_debug_ui(); + public: engine(); diff --git a/source/render/renderer.cpp b/source/render/renderer.cpp index 3831c80..10a1773 100644 --- a/source/render/renderer.cpp +++ b/source/render/renderer.cpp @@ -352,17 +352,6 @@ void renderer::render(request req, glm::mat4 view, glm::mat4 projection) { std::move(albedo_buffer), std::move(depth_image)); } - ImGui_ImplGlfw_NewFrame(); - ImGui::NewFrame(); - - ImGui::Begin("Test"); - - ImGui::Text("Hello World!"); - - ImGui::End(); - - ImGui::Render(); - imgui_buffer = vuk::extra::ImGui_ImplVuk_Render( frame_allocator, std::move(imgui_buffer), imgui_data); @@ -440,4 +429,13 @@ std::uint32_t renderer::register_mesh(const game::mesh_node &mesh, return id; } + +void renderer::do_ui(const std::function &cb) { + ImGui_ImplGlfw_NewFrame(); + ImGui::NewFrame(); + + cb(); + ImGui::Render(); +} + } // namespace trb::render diff --git a/source/render/renderer.hpp b/source/render/renderer.hpp index 7c9992f..fd2ac73 100644 --- a/source/render/renderer.hpp +++ b/source/render/renderer.hpp @@ -7,6 +7,7 @@ #include "ui/display.hpp" #include "vuk/extra/ImGuiIntegration.hpp" +#include #include #include #include @@ -98,6 +99,8 @@ public: [[nodiscard]] std::uint32_t register_mesh(const game::mesh_node &mesh, const game::texture_source &albedo); + + void do_ui(const std::function &cb); }; } // namespace trb::render