Show chunk borders debug option
This commit is contained in:
+24
-4
@@ -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
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user