Merge pull request #699 from eliotbyte/blocks-renderer-and-generator-update-review

Blocks renderer and generator update review
This commit is contained in:
MihailRis 2025-11-24 01:37:25 +03:00 • committed by GitHub
commit 9982566b44
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -363,12 +363,11 @@ void ChunksRenderer::drawSortedMeshes(const Camera& camera, Shader& shader) {
struct VisibleChunkTrans {
glm::ivec2 key;
const std::shared_ptr<Chunk>* chunkPtr;
long long nearestDist2;
};
std::vector<VisibleChunkTrans> order;
order.reserve(indices.size());
// Build per-chunk nearest distance for translucent entries
// Build list of visible translucent chunks in the same order as indices
for (const auto& index : indices) {
const auto& chunk = chunks[index.index];
if (chunk == nullptr || !chunk->flags.lighted) {
@ -388,19 +387,12 @@ void ChunksRenderer::drawSortedMeshes(const Camera& camera, Shader& shader) {
if (!frustum.isBoxVisible(bounds.min, bounds.max)) continue;
}
long long nearest = LLONG_MAX;
for (const auto& e : entries) {
long long d2 = static_cast<long long>(glm::distance2(e.position, cameraPos));
if (d2 < nearest) nearest = d2;
}
order.push_back(VisibleChunkTrans{glm::ivec2(chunk->x, chunk->z), &chunks[index.index], nearest});
order.push_back(VisibleChunkTrans{
glm::ivec2(chunk->x, chunk->z),
&chunks[index.index]
});
}
// Sort chunks by nearest translucent distance back-to-front (far to near)
std::sort(order.begin(), order.end(), [](const VisibleChunkTrans& a, const VisibleChunkTrans& b) {
return a.nearestDist2 > b.nearestDist2;
});
// Draw per-chunk sorted mesh (keeps GPU buffers and avoids per-frame repack)
for (const auto& item : order) {
const auto& chunk = *item.chunkPtr;