diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index 65dc02f2..a16922d1 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -194,6 +194,7 @@ void WorldRenderer::renderLevel( auto assets = engine->getAssets(); auto atlas = assets->get("blocks"); + bool culling = engine->getSettings().graphics.frustumCulling.get(); float fogFactor = 15.0f / ((float)settings.chunks.loadDistance.get()-2); auto shader = assets->get("main"); @@ -207,7 +208,8 @@ void WorldRenderer::renderLevel( auto entityShader = assets->get("entity"); setupWorldShader(entityShader, camera, settings, fogFactor); - level->entities->render(assets, *modelBatch, *frustumCulling, delta, pause); + level->entities->render( + assets, *modelBatch, culling ? frustumCulling.get() : nullptr, delta, pause); if (!pause) { scripting::on_frontend_render(); @@ -252,7 +254,9 @@ void WorldRenderer::renderLines( renderBlockSelection(); } if (player->debug && showEntitiesDebug) { - level->entities->renderDebug(*lineBatch, *frustumCulling, ctx); + bool culling = engine->getSettings().graphics.frustumCulling.get(); + level->entities->renderDebug( + *lineBatch, culling ? frustumCulling.get() : nullptr, ctx); } } diff --git a/src/objects/Entities.cpp b/src/objects/Entities.cpp index b7042d8a..6e6d593d 100644 --- a/src/objects/Entities.cpp +++ b/src/objects/Entities.cpp @@ -472,7 +472,7 @@ static void debug_render_skeleton( } void Entities::renderDebug( - LineBatch& batch, const Frustum& frustum, const DrawContext& pctx + LineBatch& batch, const Frustum* frustum, const DrawContext& pctx ) { { auto ctx = pctx.sub(&batch); @@ -482,7 +482,7 @@ void Entities::renderDebug( const auto& hitbox = rigidbody.hitbox; const auto& pos = transform.pos; const auto& size = transform.size; - if (!frustum.isBoxVisible(pos-size, pos+size)) { + if (frustum && !frustum->isBoxVisible(pos-size, pos+size)) { continue; } batch.box(hitbox.position, hitbox.halfsize * 2.0f, glm::vec4(1.0f)); @@ -507,7 +507,7 @@ void Entities::renderDebug( auto config = skeleton.config; const auto& pos = transform.pos; const auto& size = transform.size; - if (!frustum.isBoxVisible(pos-size, pos+size)) { + if (frustum && !frustum->isBoxVisible(pos-size, pos+size)) { continue; } auto bone = config->getRoot(); @@ -517,7 +517,7 @@ void Entities::renderDebug( } void Entities::render( - Assets* assets, ModelBatch& batch, const Frustum& frustum, float delta, bool pause + Assets* assets, ModelBatch& batch, const Frustum* frustum, float delta, bool pause ) { if (!pause) { scripting::on_entities_render(delta); @@ -530,7 +530,7 @@ void Entities::render( } const auto& pos = transform.pos; const auto& size = transform.size; - if (frustum.isBoxVisible(pos-size, pos+size)) { + if (!frustum || frustum->isBoxVisible(pos-size, pos+size)) { const auto* rigConfig = skeleton.config; rigConfig->render(assets, batch, skeleton, transform.combined); } diff --git a/src/objects/Entities.hpp b/src/objects/Entities.hpp index 65bad419..6e6839c9 100644 --- a/src/objects/Entities.hpp +++ b/src/objects/Entities.hpp @@ -177,7 +177,7 @@ public: struct RaycastResult { entityid_t entity; glm::ivec3 normal; - float distance; + float distance; }; Entities(Level* level); @@ -186,8 +186,8 @@ public: void updatePhysics(float delta); void update(float delta); - void renderDebug(LineBatch& batch, const Frustum& frustum, const DrawContext& ctx); - void render(Assets* assets, ModelBatch& batch, const Frustum& frustum, float delta, bool pause); + void renderDebug(LineBatch& batch, const Frustum* frustum, const DrawContext& ctx); + void render(Assets* assets, ModelBatch& batch, const Frustum* frustum, float delta, bool pause); entityid_t spawn( EntityDef& def,