reduce copies in ThreadPool

This commit is contained in:
MihailRis 2025-12-25 23:39:11 +03:00
parent d14f5d6dfd
commit 79eb185530
7 changed files with 35 additions and 26 deletions

View file

@ -785,7 +785,7 @@ ChunkMesh BlocksRenderer::render(
IndexBufferData {indexBuffer.get(), indexCount},
IndexBufferData {denseIndexBuffer.get(), denseIndexCount},
}
), std::move(sortingMesh)};
), std::move(sortingMesh), nullptr};
}
size_t BlocksRenderer::getMemoryConsumption() const {

View file

@ -21,7 +21,7 @@ class VoxelsVolume;
class ContentGfxCache;
struct UVRegion;
class BlocksRenderer {
class BlocksRenderer final {
public:
BlocksRenderer(
size_t capacity,
@ -29,7 +29,7 @@ public:
const ContentGfxCache& cache,
const EngineSettings& settings
);
virtual ~BlocksRenderer();
~BlocksRenderer();
void build(const Chunk* chunk, const VoxelsVolume& volume);
ChunkMesh render(

View file

@ -73,14 +73,16 @@ ChunksRenderer::ChunksRenderer(
*level, cache, settings
);
},
[&](RendererResult& result) {
if (!result.cancelled) {
auto meshData = std::move(result.meshData);
meshes[result.key] = ChunkMesh {
std::make_unique<Mesh<ChunkVertex>>(meshData.mesh),
std::move(meshData.sortingMesh)};
}
inwork.erase(result.key);
[&](RendererResult&& result) {
if (!result.cancelled) {
auto meshData = std::move(result.meshData);
auto chunk = std::make_unique<Mesh<ChunkVertex>>(meshData.mesh);
meshes[result.key] = ChunkMesh {
std::move(chunk),
std::move(meshData.sortingMesh),
nullptr};
}
inwork.erase(result.key);
},
settings.graphics.chunkMaxRenderers.get()
) {
@ -130,8 +132,8 @@ const Mesh<ChunkVertex>* ChunksRenderer::render(
auto voxelsBuffer = prepareVoxelsVolume(*chunk);
auto mesh = renderer->render(chunk.get(), *voxelsBuffer);
meshes[key] =
ChunkMesh {std::move(mesh.mesh), std::move(mesh.sortingMeshData)};
meshes[key] = ChunkMesh {
std::move(mesh.mesh), std::move(mesh.sortingMeshData), nullptr};
return meshes[key].mesh.get();
}
if (inwork.find(key) != inwork.end()) {
@ -174,7 +176,7 @@ const Mesh<ChunkVertex>* ChunksRenderer::getOrRender(
}
void ChunksRenderer::update() {
threadPool.update();
threadPool.pullResults();
}
const Mesh<ChunkVertex>* ChunksRenderer::retrieveChunk(

View file

@ -1,14 +1,14 @@
#pragma once
#include "graphics/core/MeshData.hpp"
#include "util/Buffer.hpp"
#include <vector>
#include <array>
#include <memory>
#include <glm/vec2.hpp>
#include <glm/vec3.hpp>
#include "graphics/core/MeshData.hpp"
#include "util/Buffer.hpp"
/// @brief Chunk mesh vertex format
struct ChunkVertex {
glm::vec3 position;
@ -49,5 +49,5 @@ struct ChunkMeshData {
struct ChunkMesh {
std::unique_ptr<Mesh<ChunkVertex>> mesh;
SortingMeshData sortingMeshData;
std::unique_ptr<Mesh<ChunkVertex> > sortedMesh = nullptr;
std::unique_ptr<Mesh<ChunkVertex> > sortedMesh;
};