optimize (part 3)
This commit is contained in:
@@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user