From 2c1adcedbd18dcbca135d9670285f5d48ad9d9ab Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 18 Jul 2024 13:50:57 +0300 Subject: [PATCH] fix u_timer behaviour when paused --- src/frontend/screens/LevelScreen.cpp | 6 +++--- src/graphics/render/WorldRenderer.cpp | 6 ++++-- src/graphics/render/WorldRenderer.hpp | 2 ++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/frontend/screens/LevelScreen.cpp b/src/frontend/screens/LevelScreen.cpp index 4c2474d7..e7c1effb 100644 --- a/src/frontend/screens/LevelScreen.cpp +++ b/src/frontend/screens/LevelScreen.cpp @@ -99,7 +99,7 @@ void LevelScreen::saveWorldPreview() { Viewport viewport(previewSize * 1.5, previewSize); DrawContext ctx(&pctx, viewport, batch.get()); - worldRenderer->draw(ctx, &camera, false, true, postProcessing.get()); + worldRenderer->draw(ctx, &camera, false, true, 0.0f, postProcessing.get()); auto image = postProcessing->toImage(); image->flipY(); imageio::write(paths->resolve("world:preview.png").u8string(), image.get()); @@ -156,13 +156,13 @@ void LevelScreen::update(float delta) { hud->update(hudVisible); } -void LevelScreen::draw(float) { +void LevelScreen::draw(float delta) { auto camera = controller->getPlayer()->currentCamera; Viewport viewport(Window::width, Window::height); DrawContext ctx(nullptr, viewport, batch.get()); - worldRenderer->draw(ctx, camera.get(), hudVisible, hud->isPause(), postProcessing.get()); + worldRenderer->draw(ctx, camera.get(), hudVisible, hud->isPause(), delta, postProcessing.get()); if (hudVisible) { hud->draw(ctx); diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index f5a3ef93..60265b88 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -170,7 +170,7 @@ void WorldRenderer::renderLevel( shader->use(); shader->uniformMatrix("u_proj", camera->getProjection()); shader->uniformMatrix("u_view", camera->getView()); - shader->uniform1f("u_timer", Window::time()); + shader->uniform1f("u_timer", timer); shader->uniform1f("u_gamma", settings.graphics.gamma.get()); shader->uniform1f("u_fogFactor", fogFactor); shader->uniform1f("u_fogCurve", settings.graphics.fogCurve.get()); @@ -301,8 +301,10 @@ void WorldRenderer::draw( Camera* camera, bool hudVisible, bool pause, + float delta, PostProcessing* postProcessing ){ + timer += delta * !pause; auto world = level->getWorld(); const Viewport& vp = pctx.getViewport(); camera->aspect = vp.getWidth() / static_cast(vp.getHeight()); @@ -343,7 +345,7 @@ void WorldRenderer::draw( // Rendering fullscreen quad with auto screenShader = assets->get("screen"); screenShader->use(); - screenShader->uniform1f("u_timer", Window::time()); + screenShader->uniform1f("u_timer", timer); screenShader->uniform1f("u_dayTime", level->getWorld()->daytime); postProcessing->render(pctx, screenShader); } diff --git a/src/graphics/render/WorldRenderer.hpp b/src/graphics/render/WorldRenderer.hpp index 99482059..755dd98a 100644 --- a/src/graphics/render/WorldRenderer.hpp +++ b/src/graphics/render/WorldRenderer.hpp @@ -40,6 +40,7 @@ class WorldRenderer { std::unique_ptr skybox; std::unique_ptr batch3d; std::unique_ptr modelBatch; + float timer = 0.0f; bool drawChunk(size_t index, Camera* camera, Shader* shader, bool culling); void drawChunks(Chunks* chunks, Camera* camera, Shader* shader); @@ -73,6 +74,7 @@ public: Camera* camera, bool hudVisible, bool pause, + float delta, PostProcessing* postProcessing ); void drawBorders(int sx, int sy, int sz, int ex, int ey, int ez);