Merge remote-tracking branch 'origin/main'

This commit is contained in:
InfiniteCoder
2024-08-05 21:24:27 +03:00
10 changed files with 48 additions and 19 deletions
+13 -12
View File
@@ -113,6 +113,10 @@ bool WorldRenderer::drawChunk(
}
void WorldRenderer::drawChunks(Chunks* chunks, Camera* camera, Shader* shader) {
auto assets = engine->getAssets();
auto atlas = assets->get<Atlas>("blocks");
atlas->getTexture()->bind();
renderer->update();
// [warning] this whole method is not thread-safe for chunks
@@ -122,8 +126,8 @@ void WorldRenderer::drawChunks(Chunks* chunks, Camera* camera, Shader* shader) {
if (chunks->chunks[i] == nullptr) continue;
indices.emplace_back(i);
}
float px = camera->position.x / (float)CHUNK_W - 0.5f;
float pz = camera->position.z / (float)CHUNK_D - 0.5f;
float px = camera->position.x / static_cast<float>(CHUNK_W) - 0.5f;
float pz = camera->position.z / static_cast<float>(CHUNK_D) - 0.5f;
std::sort(indices.begin(), indices.end(), [chunks, px, pz](auto i, auto j) {
const auto a = chunks->chunks[i].get();
const auto b = chunks->chunks[j].get();
@@ -186,21 +190,13 @@ void WorldRenderer::renderLevel(
bool pause
) {
auto assets = engine->getAssets();
auto atlas = assets->get<Atlas>("blocks");
bool culling = engine->getSettings().graphics.frustumCulling.get();
float fogFactor = 15.0f / ((float)settings.chunks.loadDistance.get() - 2);
auto shader = assets->get<Shader>("main");
setupWorldShader(shader, camera, settings, fogFactor);
skybox->bind();
atlas->getTexture()->bind();
drawChunks(level->chunks.get(), camera, shader);
auto entityShader = assets->get<Shader>("entity");
setupWorldShader(entityShader, camera, settings, fogFactor);
skybox->bind();
level->entities->render(
assets,
@@ -209,11 +205,16 @@ void WorldRenderer::renderLevel(
delta,
pause
);
modelBatch->render();
auto shader = assets->get<Shader>("main");
setupWorldShader(shader, camera, settings, fogFactor);
drawChunks(level->chunks.get(), camera, shader);
if (!pause) {
scripting::on_frontend_render();
}
modelBatch->render();
skybox->unbind();
}