From 6d88b7c3d14d9eefef4737857274b341e2bb3b49 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 25 Jul 2025 12:45:28 +0300 Subject: [PATCH] add dense-render-distance setting --- src/graphics/render/ChunksRenderer.cpp | 13 ++++++++----- src/io/settings_io.cpp | 1 + src/settings.hpp | 2 ++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/graphics/render/ChunksRenderer.cpp b/src/graphics/render/ChunksRenderer.cpp index e3c1afb9..bb816c37 100644 --- a/src/graphics/render/ChunksRenderer.cpp +++ b/src/graphics/render/ChunksRenderer.cpp @@ -18,9 +18,6 @@ static debug::Logger logger("chunks-render"); size_t ChunksRenderer::visibleChunks = 0; -inline constexpr int DENSE_DISTANCE = 64; -inline constexpr int DENSE_DISTANCE2 = DENSE_DISTANCE * DENSE_DISTANCE; - class RendererWorker : public util::Worker, RendererResult> { const Chunks& chunks; BlocksRenderer renderer; @@ -197,6 +194,9 @@ void ChunksRenderer::drawChunksShadowsPass( atlas.getTexture()->bind(); + auto denseDistance = settings.graphics.denseRenderDistance.get(); + auto denseDistance2 = denseDistance * denseDistance; + for (const auto& chunk : chunks.getChunks()) { if (chunk == nullptr) { continue; @@ -225,7 +225,7 @@ void ChunksRenderer::drawChunksShadowsPass( shader.uniformMatrix("u_model", model); found->second.mesh->draw(GL_TRIANGLES, glm::distance2(playerCamera.position * glm::vec3(1, 0, 1), - (min + max) * 0.5f * glm::vec3(1, 0, 1)) < DENSE_DISTANCE2); + (min + max) * 0.5f * glm::vec3(1, 0, 1)) < denseDistance2); } } @@ -262,6 +262,9 @@ void ChunksRenderer::drawChunks( visibleChunks = 0; shader.uniform1i("u_alphaClip", true); + auto denseDistance = settings.graphics.denseRenderDistance.get(); + auto denseDistance2 = denseDistance * denseDistance; + // TODO: minimize draw calls number for (int i = indices.size()-1; i >= 0; i--) { auto& chunk = chunks.getChunks()[indices[i].index]; @@ -274,7 +277,7 @@ void ChunksRenderer::drawChunks( glm::mat4 model = glm::translate(glm::mat4(1.0f), coord); shader.uniformMatrix("u_model", model); mesh->draw(GL_TRIANGLES, glm::distance2(camera.position * glm::vec3(1, 0, 1), - (coord + glm::vec3(CHUNK_W * 0.5f, 0.0f, CHUNK_D * 0.5f))) < DENSE_DISTANCE2); + (coord + glm::vec3(CHUNK_W * 0.5f, 0.0f, CHUNK_D * 0.5f))) < denseDistance2); visibleChunks++; } } diff --git a/src/io/settings_io.cpp b/src/io/settings_io.cpp index 000e965b..cdbf567e 100644 --- a/src/io/settings_io.cpp +++ b/src/io/settings_io.cpp @@ -77,6 +77,7 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) { builder.add("advanced-render", &settings.graphics.advancedRender); builder.add("ssao", &settings.graphics.ssao); builder.add("shadows-quality", &settings.graphics.shadowsQuality); + builder.add("dense-render-distance", &settings.graphics.denseRenderDistance); builder.section("ui"); builder.add("language", &settings.ui.language); diff --git a/src/settings.hpp b/src/settings.hpp index e8826800..fb968e1b 100644 --- a/src/settings.hpp +++ b/src/settings.hpp @@ -81,6 +81,8 @@ struct GraphicsSettings { FlagSetting ssao {true}; /// @brief Shadows quality IntegerSetting shadowsQuality {0, 0, 3}; + /// @brief Dense render distance + IntegerSetting denseRenderDistance {40, 0, 10'000}; }; struct DebugSettings {