mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-06 19:41:51 +00:00
reduce copies in ThreadPool
This commit is contained in:
parent
d14f5d6dfd
commit
79eb185530
7 changed files with 35 additions and 26 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue