optimize shadow maps generation a bit

This commit is contained in:
MihailRis 2025-07-22 01:41:52 +03:00
parent e24d1bdb9c
commit 6debc92ae5
2 changed files with 21 additions and 9 deletions

View File

@ -185,6 +185,9 @@ const Mesh<ChunkVertex>* ChunksRenderer::retrieveChunk(
void ChunksRenderer::drawChunksShadowsPass(
const Camera& camera, Shader& shader
) {
Frustum frustum;
frustum.update(camera.getProjView());
const auto& atlas = assets.require<Atlas>("blocks");
atlas.getTexture()->bind();
@ -193,19 +196,29 @@ void ChunksRenderer::drawChunksShadowsPass(
if (chunk == nullptr) {
continue;
}
glm::ivec2 pos {chunk->x, chunk->z};
const auto& found = meshes.find({chunk->x, chunk->z});
if (found == meshes.end()) {
continue;
}
auto mesh = found->second.mesh.get();
if (mesh) {
glm::vec3 coord(
chunk->x * CHUNK_W + 0.5f, 0.5f, chunk->z * CHUNK_D + 0.5f
);
glm::mat4 model = glm::translate(glm::mat4(1.0f), coord);
shader.uniformMatrix("u_model", model);
mesh->draw();
glm::vec3 coord(
pos.x * CHUNK_W + 0.5f, 0.5f, pos.y * CHUNK_D + 0.5f
);
glm::vec3 min(pos.x * CHUNK_W, chunk->bottom, chunk->z * CHUNK_D);
glm::vec3 max(
chunk->x * CHUNK_W + CHUNK_W,
chunk->top,
chunk->z * CHUNK_D + CHUNK_D
);
if (!frustum.isBoxVisible(min, max)) {
continue;
}
glm::mat4 model = glm::translate(glm::mat4(1.0f), coord);
shader.uniformMatrix("u_model", model);
found->second.mesh->draw();
}
}

View File

@ -400,7 +400,6 @@ void WorldRenderer::generateShadowsMap(
shadowCamera.setProjection(glm::ortho(min.x, max.x, min.y, max.y, 0.1f, 1000.0f));
{
frustumCulling->update(shadowCamera.getProjView());
auto sctx = pctx.sub();
sctx.setDepthTest(true);
sctx.setCullFace(true);