add particles stats to debug panel

This commit is contained in:
MihailRis 2024-11-02 21:07:34 +03:00
parent 217176f74f
commit cee214754b
4 changed files with 24 additions and 4 deletions

View File

@ -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<UINode> 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);

View File

@ -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<MainBatch>(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<Texture>("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;

View File

@ -19,4 +19,7 @@ public:
~ParticlesRenderer();
void render(const Assets& assets, const Camera& camera, float delta);
static size_t visibleParticles;
static size_t aliveEmitters;
};

View File

@ -63,7 +63,7 @@ WorldRenderer::WorldRenderer(
&engine->getSettings()
)),
particles(std::make_unique<ParticlesRenderer>(*engine->getAssets())) {
renderer = std::make_unique<ChunksRenderer>(
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<Shader>("main");