optimize (part 3)

This commit is contained in:
MihailRis
2024-11-16 15:24:46 +03:00
parent 1ff89491e6
commit 7bdeba982b
2 changed files with 29 additions and 18 deletions
+28 -17
View File
@@ -257,31 +257,42 @@ void ChunksRenderer::drawSortedMeshes(const Camera& camera, Shader& shader) {
if (chunkEntries.size() == 1) { if (chunkEntries.size() == 1) {
auto& entry = chunkEntries.at(0); auto& entry = chunkEntries.at(0);
if (found->second.planesMesh == nullptr) { if (found->second.sortedMesh == nullptr) {
found->second.planesMesh = std::make_shared<Mesh>( found->second.sortedMesh = std::make_shared<Mesh>(
entry.vertexData.data(), entry.vertexData.size() / 6, ATTRS entry.vertexData.data(), entry.vertexData.size() / 6, ATTRS
); );
} }
found->second.planesMesh->draw(); found->second.sortedMesh->draw();
continue; continue;
} }
std::sort(chunkEntries.begin(), chunkEntries.end()); if (chunkEntries.empty()) {
size_t size = 0; continue;
for (const auto& entry : chunkEntries) {
size += entry.vertexData.size();
} }
util::Buffer<float> buffer(size);
size_t offset = 0; if (found->second.sortedMesh == nullptr) {
for (const auto& entry : chunkEntries) { std::sort(chunkEntries.begin(), chunkEntries.end());
std::memcpy( size_t size = 0;
(buffer.data() + offset), for (const auto& entry : chunkEntries) {
entry.vertexData.data(), size += entry.vertexData.size();
entry.vertexData.size() * sizeof(float) }
static util::Buffer<float> buffer;
if (buffer.size() < size) {
buffer = util::Buffer<float>(size);
}
size_t offset = 0;
for (const auto& entry : chunkEntries) {
std::memcpy(
(buffer.data() + offset),
entry.vertexData.data(),
entry.vertexData.size() * sizeof(float)
);
offset += entry.vertexData.size();
}
found->second.sortedMesh = std::make_shared<Mesh>(
buffer.data(), size / 6, ATTRS
); );
offset += entry.vertexData.size();
} }
sortedMesh->reload(buffer.data(), size / 6); found->second.sortedMesh->draw();
sortedMesh->draw();
} }
} }
+1 -1
View File
@@ -31,5 +31,5 @@ struct ChunkMeshData {
struct ChunkMesh { struct ChunkMesh {
std::shared_ptr<Mesh> mesh; std::shared_ptr<Mesh> mesh;
SortingMeshData sortingMeshData; SortingMeshData sortingMeshData;
std::shared_ptr<Mesh> planesMesh = nullptr; std::shared_ptr<Mesh> sortedMesh = nullptr;
}; };