From 4e5199d89a34fedaab8693102d5bdb6b13d6170f Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 29 Apr 2025 15:59:52 +0300 Subject: [PATCH] feat: lights debug mode --- res/shaders/main.glslf | 3 +++ src/engine/Engine.cpp | 3 ++- src/frontend/screens/LevelScreen.cpp | 19 ++++++++++++------- src/graphics/render/WorldRenderer.cpp | 5 +++++ src/graphics/render/WorldRenderer.hpp | 3 +++ src/graphics/render/commons.hpp | 2 -- 6 files changed, 25 insertions(+), 10 deletions(-) diff --git a/res/shaders/main.glslf b/res/shaders/main.glslf index bccbd53a..d856acc2 100644 --- a/res/shaders/main.glslf +++ b/res/shaders/main.glslf @@ -7,10 +7,13 @@ out vec4 f_color; uniform sampler2D u_texture0; uniform samplerCube u_cubemap; uniform bool u_alphaClip; +uniform bool u_debugLights; void main() { vec3 fogColor = texture(u_cubemap, a_dir).rgb; vec4 tex_color = texture(u_texture0, a_texCoord); + if (u_debugLights) + tex_color.rgb = vec3(1.0); float alpha = a_color.a * tex_color.a; if (u_alphaClip) { if (alpha < 0.2f) diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp index 63db4490..6596733f 100644 --- a/src/engine/Engine.cpp +++ b/src/engine/Engine.cpp @@ -203,7 +203,8 @@ void Engine::updateHotkeys() { if (input->jpressed(Keycode::F2)) { saveScreenshot(); } - if (input->jpressed(Keycode::F8)) { + if (input->pressed(Keycode::LEFT_CONTROL) && input->pressed(Keycode::F3) && + input->jpressed(Keycode::U)) { gui->toggleDebug(); } if (input->jpressed(Keycode::F11)) { diff --git a/src/frontend/screens/LevelScreen.cpp b/src/frontend/screens/LevelScreen.cpp index 76f7e950..210ef802 100644 --- a/src/frontend/screens/LevelScreen.cpp +++ b/src/frontend/screens/LevelScreen.cpp @@ -184,16 +184,21 @@ void LevelScreen::saveWorldPreview() { void LevelScreen::updateHotkeys() { auto& settings = engine.getSettings(); - if (input.jpressed(Keycode::O)) { - settings.graphics.frustumCulling.toggle(); - } if (input.jpressed(Keycode::F1)) { hudVisible = !hudVisible; } - if (input.jpressed(Keycode::F3)) { - debug = !debug; - hud->setDebug(debug); - renderer->setDebug(debug); + if (!input.pressed(Keycode::LEFT_CONTROL)) { + if (input.jpressed(Keycode::F3)) { + debug = !debug; + hud->setDebug(debug); + renderer->setDebug(debug); + } + } else if (input.pressed(Keycode::F3)) { + if (input.jpressed(Keycode::L)) { + renderer->toggleLightsDebug(); + } else if (input.jpressed(Keycode::O)) { + settings.graphics.frustumCulling.toggle(); + } } } diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index 79a9edfc..20640a78 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -118,6 +118,7 @@ void WorldRenderer::setupWorldShader( shader.uniform1f("u_gamma", settings.graphics.gamma.get()); shader.uniform1f("u_fogFactor", fogFactor); shader.uniform1f("u_fogCurve", settings.graphics.fogCurve.get()); + shader.uniform1i("u_debugLights", lightsDebug); shader.uniform1f("u_weatherFogOpacity", weather.fogOpacity()); shader.uniform1f("u_weatherFogDencity", weather.fogDencity()); shader.uniform1f("u_weatherFogCurve", weather.fogCurve()); @@ -442,6 +443,10 @@ void WorldRenderer::setDebug(bool flag) { debug = flag; } +void WorldRenderer::toggleLightsDebug() { + lightsDebug = !lightsDebug; +} + Weather& WorldRenderer::getWeather() { return weather; } diff --git a/src/graphics/render/WorldRenderer.hpp b/src/graphics/render/WorldRenderer.hpp index fbcf5480..fbfd4998 100644 --- a/src/graphics/render/WorldRenderer.hpp +++ b/src/graphics/render/WorldRenderer.hpp @@ -48,6 +48,7 @@ class WorldRenderer { float timer = 0.0f; bool debug = false; + bool lightsDebug = false; /// @brief Render block selection lines void renderBlockSelection(); @@ -107,5 +108,7 @@ public: void setDebug(bool flag); + void toggleLightsDebug(); + Weather& getWeather(); }; diff --git a/src/graphics/render/commons.hpp b/src/graphics/render/commons.hpp index 3f193500..cfc2f16c 100644 --- a/src/graphics/render/commons.hpp +++ b/src/graphics/render/commons.hpp @@ -22,8 +22,6 @@ struct ChunkVertex { {{}, 0}}; }; -/// @brief Chunk mesh vertex attributes - template class Mesh;