From ed2f0cac774c47bcd7fedb727de642673c28696b Mon Sep 17 00:00:00 2001 From: MihailRis Date: Mon, 2 Feb 2026 23:05:44 +0300 Subject: [PATCH] add 'graphics.particles-batch-vertices' setting --- src/graphics/render/ParticlesRenderer.cpp | 6 +++--- src/graphics/render/ParticlesRenderer.hpp | 4 ++-- src/graphics/render/WorldRenderer.cpp | 2 +- src/graphics/render/WorldRenderer.hpp | 1 - src/io/settings_io.cpp | 1 + src/settings.hpp | 2 ++ 6 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/graphics/render/ParticlesRenderer.cpp b/src/graphics/render/ParticlesRenderer.cpp index 8d92293d5..3c00830dd 100644 --- a/src/graphics/render/ParticlesRenderer.cpp +++ b/src/graphics/render/ParticlesRenderer.cpp @@ -19,12 +19,12 @@ ParticlesRenderer::ParticlesRenderer( const Assets& assets, const Level& level, const Chunks& chunks, - const GraphicsSettings* settings + const GraphicsSettings& settings ) : chunks(chunks), assets(assets), settings(settings), - batch(std::make_unique(4096)) { + batch(std::make_unique(settings.particlesBatchVertices.get())) { } ParticlesRenderer::~ParticlesRenderer() = default; @@ -188,7 +188,7 @@ void ParticlesRenderer::render(const Camera& camera) { aliveEmitters = emitters.size(); visibleParticles = 0; - bool backlight = settings->backlight.get(); + bool backlight = settings.backlight.get(); batch->begin(); for (auto& [texture, vec] : particles) { diff --git a/src/graphics/render/ParticlesRenderer.hpp b/src/graphics/render/ParticlesRenderer.hpp index ed9c3f314..3dcdbbb05 100644 --- a/src/graphics/render/ParticlesRenderer.hpp +++ b/src/graphics/render/ParticlesRenderer.hpp @@ -18,7 +18,7 @@ struct GraphicsSettings; class ParticlesRenderer { const Chunks& chunks; const Assets& assets; - const GraphicsSettings* settings; + const GraphicsSettings& settings; std::unordered_map> particles; std::unique_ptr batch; @@ -34,7 +34,7 @@ public: const Assets& assets, const Level& level, const Chunks& chunks, - const GraphicsSettings* settings + const GraphicsSettings& settings ); ~ParticlesRenderer(); diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index e05e7191c..e55bdd556 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -87,7 +87,7 @@ WorldRenderer::WorldRenderer( engine.getSettings() )), particles(std::make_unique( - assets, level, *player.chunks, &engine.getSettings().graphics + assets, level, *player.chunks, engine.getSettings().graphics )), texts(std::make_unique(*batch3d, assets, *frustumCulling)), blockWraps( diff --git a/src/graphics/render/WorldRenderer.hpp b/src/graphics/render/WorldRenderer.hpp index 0412d95a3..764204c2d 100644 --- a/src/graphics/render/WorldRenderer.hpp +++ b/src/graphics/render/WorldRenderer.hpp @@ -22,7 +22,6 @@ class DebugLinesRenderer; class DrawContext; class Engine; class Frustum; -class GBuffer; class HandsRenderer; class Level; class LevelFrontend; diff --git a/src/io/settings_io.cpp b/src/io/settings_io.cpp index da0027c4d..76285d733 100644 --- a/src/io/settings_io.cpp +++ b/src/io/settings_io.cpp @@ -76,6 +76,7 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) { builder.add("chunk-max-vertices", &settings.graphics.chunkMaxVertices); builder.add("chunk-max-vertices-dense", &settings.graphics.chunkMaxVerticesDense); builder.add("chunk-max-renderers", &settings.graphics.chunkMaxRenderers); + builder.add("particles-batch-vertices", &settings.graphics.particlesBatchVertices); builder.add("advanced-render", &settings.graphics.advancedRender); builder.add("ssao", &settings.graphics.ssao); builder.add("shadows-quality", &settings.graphics.shadowsQuality); diff --git a/src/settings.hpp b/src/settings.hpp index 0a0754235..c98690023 100644 --- a/src/settings.hpp +++ b/src/settings.hpp @@ -79,6 +79,8 @@ struct GraphicsSettings { IntegerSetting chunkMaxVerticesDense {800'000, 0, 8'000'000}; /// @brief Limit of chunk renderers count IntegerSetting chunkMaxRenderers {6, -4, 32}; + /// @brief Particles renderer vertices buffer capacity + IntegerSetting particlesBatchVertices {4'096, 0, 1'000'000}; /// @brief Advanced render pipeline FlagSetting advancedRender {true}; /// @brief Screen space ambient occlusion quality