From cee214754bfc4a3a224446590fdf829aa56a57d1 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 2 Nov 2024 21:07:34 +0300 Subject: [PATCH] add particles stats to debug panel --- src/frontend/debug_panel.cpp | 7 +++++++ src/graphics/render/ParticlesRenderer.cpp | 14 ++++++++++++-- src/graphics/render/ParticlesRenderer.hpp | 3 +++ src/graphics/render/WorldRenderer.cpp | 4 ++-- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/frontend/debug_panel.cpp b/src/frontend/debug_panel.cpp index c16dd5dd..fd3e4a3d 100644 --- a/src/frontend/debug_panel.cpp +++ b/src/frontend/debug_panel.cpp @@ -9,6 +9,7 @@ #include "graphics/ui/elements/TrackBar.hpp" #include "graphics/ui/elements/InputBindBox.hpp" #include "graphics/render/WorldRenderer.hpp" +#include "graphics/render/ParticlesRenderer.hpp" #include "logic/scripting/scripting.hpp" #include "objects/Player.hpp" #include "objects/Entities.hpp" @@ -83,6 +84,12 @@ std::shared_ptr create_debug_panel( bool culling = settings.graphics.frustumCulling.get(); return L"frustum-culling: "+std::wstring(culling ? L"on" : L"off"); })); + panel->add(create_label([=]() { + return L"particles: " + + std::to_wstring(ParticlesRenderer::visibleParticles) + + L" emitters: " + + std::to_wstring(ParticlesRenderer::aliveEmitters); + })); panel->add(create_label([=]() { return L"chunks: "+std::to_wstring(level->chunks->getChunksCount())+ L" visible: "+std::to_wstring(level->chunks->visible); diff --git a/src/graphics/render/ParticlesRenderer.cpp b/src/graphics/render/ParticlesRenderer.cpp index 5b541672..7f0b67f5 100644 --- a/src/graphics/render/ParticlesRenderer.cpp +++ b/src/graphics/render/ParticlesRenderer.cpp @@ -1,17 +1,22 @@ #include "ParticlesRenderer.hpp" #include "assets/Assets.hpp" +#include "assets/assets_util.hpp" #include "graphics/core/Shader.hpp" #include "graphics/core/Texture.hpp" #include "graphics/render/MainBatch.hpp" #include "window/Camera.hpp" +size_t ParticlesRenderer::visibleParticles = 0; +size_t ParticlesRenderer::aliveEmitters = 0; + ParticlesRenderer::ParticlesRenderer(const Assets& assets) : batch(std::make_unique(1024)) { + auto region = util::get_texture_region(assets, "blocks:grass_side", ""); Emitter emitter(glm::vec3(0, 100, 0), Particle { - glm::vec3(), glm::vec3(), 5.0f, UVRegion(0,0,1,1) - }, assets.get("gui/error"), 0.003f, -1); + glm::vec3(), glm::vec3(), 5.0f, region.region + },region.texture, 0.001f, -1); emitters.push_back(std::move(emitter)); } @@ -24,9 +29,14 @@ void ParticlesRenderer::render( const auto& up = camera.up; batch->begin(); + + aliveEmitters = emitters.size(); + visibleParticles = 0; for (auto& [texture, vec] : particles) { batch->setTexture(texture); + visibleParticles += vec.size(); + auto iter = vec.begin(); while (iter != vec.end()) { auto& particle = *iter; diff --git a/src/graphics/render/ParticlesRenderer.hpp b/src/graphics/render/ParticlesRenderer.hpp index bd910b55..c7bca3fb 100644 --- a/src/graphics/render/ParticlesRenderer.hpp +++ b/src/graphics/render/ParticlesRenderer.hpp @@ -19,4 +19,7 @@ public: ~ParticlesRenderer(); void render(const Assets& assets, const Camera& camera, float delta); + + static size_t visibleParticles; + static size_t aliveEmitters; }; diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index b36b03f3..12a2c798 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -63,7 +63,7 @@ WorldRenderer::WorldRenderer( &engine->getSettings() )), particles(std::make_unique(*engine->getAssets())) { - + renderer = std::make_unique( level, frontend->getContentGfxCache(), &engine->getSettings() ); @@ -216,7 +216,7 @@ void WorldRenderer::renderLevel( delta, pause ); - particles->render(*assets, camera, delta); + particles->render(*assets, camera, delta * !pause); modelBatch->render(); auto shader = assets->get("main");