Show chunk borders debug option

This commit is contained in:
MihailRis
2023-11-24 19:33:41 +03:00
parent 275e4af9fd
commit f54283cab1
6 changed files with 57 additions and 9 deletions
+24 -4
View File
@@ -34,6 +34,7 @@
#include "gui/GUI.h" #include "gui/GUI.h"
#include "ContentGfxCache.h" #include "ContentGfxCache.h"
#include "screens.h" #include "screens.h"
#include "world_render.h"
#include "../engine.h" #include "../engine.h"
#include "../core_defs.h" #include "../core_defs.h"
@@ -50,11 +51,12 @@ inline Label* create_label(gui::wstringsupplier supplier) {
return label; return label;
} }
HudRenderer::HudRenderer(Engine* engine, Level* level, const ContentGfxCache* cache) HudRenderer::HudRenderer(Engine* engine, Level* level, const ContentGfxCache* cache, WorldRenderer* renderer)
: level(level), : level(level),
assets(engine->getAssets()), assets(engine->getAssets()),
gui(engine->getGUI()), gui(engine->getGUI()),
cache(cache) { cache(cache),
renderer(renderer) {
auto menu = gui->getMenu(); auto menu = gui->getMenu();
batch = new Batch2D(1024); batch = new Batch2D(1024);
uicamera = new Camera(vec3(), 1); uicamera = new Camera(vec3(), 1);
@@ -126,13 +128,31 @@ HudRenderer::HudRenderer(Engine* engine, Level* level, const ContentGfxCache* ca
{ {
TrackBar* bar = new TrackBar(0.0f, 1.0f, 1.0f, 0.02f, 2); TrackBar* bar = new TrackBar(0.0f, 1.0f, 1.0f, 0.02f, 2);
bar->supplier([=]() { bar->supplier([=]() {
return level->skyLightMutliplier; return renderer->skyLightMutliplier;
}); });
bar->consumer([=](double val) { bar->consumer([=](double val) {
level->skyLightMutliplier = val; renderer->skyLightMutliplier = val;
}); });
panel->add(bar); panel->add(bar);
} }
{
Panel* checkpanel = new Panel(vec2(400, 32), vec4(5.0f), 1.0f);
checkpanel->color(vec4(0.0f));
checkpanel->orientation(Orientation::horizontal);
CheckBox* checkbox = new CheckBox();
checkbox->margin(vec4(0.0f, 0.0f, 5.0f, 0.0f));
checkbox->supplier([=]() {
return renderer->isChunkBordersOn();
});
checkbox->consumer([=](bool checked) {
renderer->setChunkBorders(checked);
});
checkpanel->add(checkbox);
checkpanel->add(new Label(L"Show Chunk Borders"));
panel->add(checkpanel);
}
panel->refresh(); panel->refresh();
menu->reset(); menu->reset();
+3 -1
View File
@@ -14,6 +14,7 @@ class Player;
class Level; class Level;
class Engine; class Engine;
class ContentGfxCache; class ContentGfxCache;
class WorldRenderer;
namespace gui { namespace gui {
class GUI; class GUI;
@@ -37,8 +38,9 @@ class HudRenderer {
std::shared_ptr<gui::UINode> debugPanel; std::shared_ptr<gui::UINode> debugPanel;
gui::GUI* gui; gui::GUI* gui;
const ContentGfxCache* const cache; const ContentGfxCache* const cache;
WorldRenderer* renderer;
public: public:
HudRenderer(Engine* engine, Level* level, const ContentGfxCache* cache); HudRenderer(Engine* engine, Level* level, const ContentGfxCache* cache, WorldRenderer* renderer);
~HudRenderer(); ~HudRenderer();
void update(); void update();
+1 -1
View File
@@ -93,7 +93,7 @@ LevelScreen::LevelScreen(Engine* engine, Level* level)
level(level) { level(level) {
cache = new ContentGfxCache(level->content, engine->getAssets()); cache = new ContentGfxCache(level->content, engine->getAssets());
worldRenderer = new WorldRenderer(engine, level, cache); worldRenderer = new WorldRenderer(engine, level, cache);
hud = new HudRenderer(engine, level, cache); hud = new HudRenderer(engine, level, cache, worldRenderer);
backlight = engine->getSettings().graphics.backlight; backlight = engine->getSettings().graphics.backlight;
} }
+22 -1
View File
@@ -24,6 +24,7 @@
#include "../assets/Assets.h" #include "../assets/Assets.h"
#include "../objects/player_control.h" #include "../objects/player_control.h"
#include "../maths/FrustumCulling.h" #include "../maths/FrustumCulling.h"
#include "../maths/voxmaths.h"
#include "../settings.h" #include "../settings.h"
#include "../engine.h" #include "../engine.h"
#include "ContentGfxCache.h" #include "ContentGfxCache.h"
@@ -110,7 +111,6 @@ void WorldRenderer::draw(const GfxContext& pctx, Camera* camera, bool occlusion)
int displayWidth = viewport.getWidth(); int displayWidth = viewport.getWidth();
int displayHeight = viewport.getHeight(); int displayHeight = viewport.getHeight();
float skyLightMutliplier = level->skyLightMutliplier;
{ {
GfxContext ctx = pctx.sub(); GfxContext ctx = pctx.sub();
ctx.depthTest(true); ctx.depthTest(true);
@@ -174,6 +174,27 @@ void WorldRenderer::draw(const GfxContext& pctx, Camera* camera, bool occlusion)
float length = 40.f; float length = 40.f;
linesShader->use(); linesShader->use();
if (chunkBorders){
linesShader->uniformMatrix("u_projview", camera->getProjView());
GfxContext ctx = pctx.sub();
ctx.depthTest(true);
vec3 coord = level->player->camera->position;
int cx = floordiv((int)coord.x, CHUNK_W);
int cz = floordiv((int)coord.z, CHUNK_D);
for (int xx = 0; xx < CHUNK_W; xx++) {
lineBatch->line(cx * CHUNK_W + xx, 0, cz * CHUNK_D,
cx * CHUNK_W + xx, CHUNK_H, cz * CHUNK_D, 0,0,1,0.5f);
lineBatch->line(cx * CHUNK_W + xx, 0, (cz+1) * CHUNK_D,
cx * CHUNK_W + xx, CHUNK_H, (cz+1) * CHUNK_D, 0,0,1,0.5f);
lineBatch->line(cx * CHUNK_W, 0, cz * CHUNK_D+xx,
cx * CHUNK_W, CHUNK_H, cz * CHUNK_D+xx, 1,0,0,0.5f);
lineBatch->line((cx+1) * CHUNK_W, 0, cz * CHUNK_D+xx,
(cx+1) * CHUNK_W, CHUNK_H, cz * CHUNK_D+xx, 1,0,0,0.5f);
}
lineBatch->render();
}
// top-right: vec3 tsl = vec3(displayWidth - length - 4, -length - 4, 0.f); // top-right: vec3 tsl = vec3(displayWidth - length - 4, -length - 4, 0.f);
vec3 tsl = vec3(displayWidth/2, -((int)displayHeight)/2, 0.f); vec3 tsl = vec3(displayWidth/2, -((int)displayHeight)/2, 0.f);
glm::mat4 model(glm::translate(glm::mat4(1.f), tsl)); glm::mat4 model(glm::translate(glm::mat4(1.f), tsl));
+7
View File
@@ -29,13 +29,20 @@ class WorldRenderer {
Frustum* frustumCulling; Frustum* frustumCulling;
LineBatch* lineBatch; LineBatch* lineBatch;
ChunksRenderer* renderer; ChunksRenderer* renderer;
bool chunkBorders = false;
bool drawChunk(size_t index, Camera* camera, Shader* shader, bool occlusion); bool drawChunk(size_t index, Camera* camera, Shader* shader, bool occlusion);
void drawChunks(Chunks* chunks, Camera* camera, Shader* shader, bool occlusion); void drawChunks(Chunks* chunks, Camera* camera, Shader* shader, bool occlusion);
public: public:
float skyLightMutliplier = 1.0f; // will be replaced with day-night cycle
WorldRenderer(Engine* engine, Level* level, const ContentGfxCache* cache); WorldRenderer(Engine* engine, Level* level, const ContentGfxCache* cache);
~WorldRenderer(); ~WorldRenderer();
void draw(const GfxContext& context, Camera* camera, bool occlusion); void draw(const GfxContext& context, Camera* camera, bool occlusion);
void drawDebug(const GfxContext& context, Camera* camera);
inline bool isChunkBordersOn() {return chunkBorders;}
inline void setChunkBorders(bool flag) {chunkBorders = flag;}
}; };
-2
View File
@@ -31,8 +31,6 @@ public:
LevelEvents* events; LevelEvents* events;
const EngineSettings& settings; const EngineSettings& settings;
float skyLightMutliplier = 1.0f; // will be replaced with day-night cycle
Level(World* world, Level(World* world,
const Content* content, const Content* content,
Player* player, Player* player,