minor refactor

This commit is contained in:
MihailRis
2024-04-04 21:51:24 +03:00
parent 781ab0e892
commit dc660edc74
2 changed files with 18 additions and 22 deletions
+16 -20
View File
@@ -16,22 +16,19 @@ const uint RENDERER_CAPACITY = 9 * 6 * 6 * 3000;
class RendererWorker : public util::Worker<std::shared_ptr<Chunk>, RendererResult> { class RendererWorker : public util::Worker<std::shared_ptr<Chunk>, RendererResult> {
Level* level; Level* level;
std::shared_ptr<BlocksRenderer> renderer; BlocksRenderer renderer;
public: public:
RendererWorker( RendererWorker(
Level* level, Level* level,
const ContentGfxCache* cache, const ContentGfxCache* cache,
const EngineSettings& settings const EngineSettings& settings
) : level(level) ) : level(level),
{ renderer(RENDERER_CAPACITY, level->content, cache, settings)
renderer = std::make_shared<BlocksRenderer>( {}
RENDERER_CAPACITY, level->content, cache, settings
);
}
RendererResult operator()(const std::shared_ptr<Chunk>& chunk) override { RendererResult operator()(const std::shared_ptr<Chunk>& chunk) override {
renderer->build(chunk.get(), level->chunksStorage.get()); renderer.build(chunk.get(), level->chunksStorage.get());
return RendererResult {glm::ivec2(chunk->x, chunk->z), renderer}; return RendererResult {glm::ivec2(chunk->x, chunk->z), &renderer};
} }
}; };
@@ -59,10 +56,9 @@ std::shared_ptr<Mesh> ChunksRenderer::render(std::shared_ptr<Chunk> chunk, bool
chunk->setModified(false); chunk->setModified(false);
if (important) { if (important) {
Mesh* mesh = renderer->render(chunk.get(), level->chunksStorage.get()); std::shared_ptr<Mesh> mesh (renderer->render(chunk.get(), level->chunksStorage.get()));
auto sptr = std::shared_ptr<Mesh>(mesh); meshes[glm::ivec2(chunk->x, chunk->z)] = mesh;
meshes[glm::ivec2(chunk->x, chunk->z)] = sptr; return mesh;
return sptr;
} }
glm::ivec2 key(chunk->x, chunk->z); glm::ivec2 key(chunk->x, chunk->z);
@@ -75,7 +71,7 @@ std::shared_ptr<Mesh> ChunksRenderer::render(std::shared_ptr<Chunk> chunk, bool
return nullptr; return nullptr;
} }
void ChunksRenderer::unload(Chunk* chunk) { void ChunksRenderer::unload(const Chunk* chunk) {
auto found = meshes.find(glm::ivec2(chunk->x, chunk->z)); auto found = meshes.find(glm::ivec2(chunk->x, chunk->z));
if (found != meshes.end()) { if (found != meshes.end()) {
meshes.erase(found); meshes.erase(found);
@@ -84,13 +80,13 @@ void ChunksRenderer::unload(Chunk* chunk) {
std::shared_ptr<Mesh> ChunksRenderer::getOrRender(std::shared_ptr<Chunk> chunk, bool important) { std::shared_ptr<Mesh> ChunksRenderer::getOrRender(std::shared_ptr<Chunk> chunk, bool important) {
auto found = meshes.find(glm::ivec2(chunk->x, chunk->z)); auto found = meshes.find(glm::ivec2(chunk->x, chunk->z));
if (found != meshes.end()){ if (found == meshes.end()) {
if (chunk->isModified()) { return render(chunk, important);
render(chunk, important);
}
return found->second;
} }
return render(chunk, important); if (chunk->isModified()) {
render(chunk, important);
}
return found->second;
} }
std::shared_ptr<Mesh> ChunksRenderer::get(Chunk* chunk) { std::shared_ptr<Mesh> ChunksRenderer::get(Chunk* chunk) {
+2 -2
View File
@@ -20,7 +20,7 @@ class ContentGfxCache;
struct RendererResult { struct RendererResult {
glm::ivec2 key; glm::ivec2 key;
std::shared_ptr<BlocksRenderer> renderer; BlocksRenderer* renderer;
}; };
class ChunksRenderer { class ChunksRenderer {
@@ -39,7 +39,7 @@ public:
virtual ~ChunksRenderer(); virtual ~ChunksRenderer();
std::shared_ptr<Mesh> render(std::shared_ptr<Chunk> chunk, bool important); std::shared_ptr<Mesh> render(std::shared_ptr<Chunk> chunk, bool important);
void unload(Chunk* chunk); void unload(const Chunk* chunk);
std::shared_ptr<Mesh> getOrRender(std::shared_ptr<Chunk> chunk, bool important); std::shared_ptr<Mesh> getOrRender(std::shared_ptr<Chunk> chunk, bool important);
std::shared_ptr<Mesh> get(Chunk* chunk); std::shared_ptr<Mesh> get(Chunk* chunk);