Backlight setting

This commit is contained in:
MihailRis
2023-11-23 14:10:08 +03:00
parent f45fcffaf8
commit 568c612970
9 changed files with 44 additions and 9 deletions
+1
View File
@@ -28,6 +28,7 @@ toml::Wrapper create_wrapper(EngineSettings& settings) {
toml::Section& graphics = wrapper.add("graphics"); toml::Section& graphics = wrapper.add("graphics");
graphics.add("fog-curve", &settings.graphics.fogCurve); graphics.add("fog-curve", &settings.graphics.fogCurve);
graphics.add("backlight", &settings.graphics.backlight);
toml::Section& debug = wrapper.add("debug"); toml::Section& debug = wrapper.add("debug");
debug.add("generator-test-mode", &settings.debug.generatorTestMode); debug.add("generator-test-mode", &settings.debug.generatorTestMode);
+20 -1
View File
@@ -246,7 +246,7 @@ Panel* create_settings_panel(Engine* engine, PagesControl* menu) {
panel->add(trackbar); panel->add(trackbar);
} }
{ /* V-Sync checkbox */{
Panel* checkpanel = new Panel(vec2(400, 32), vec4(5.0f), 1.0f); Panel* checkpanel = new Panel(vec2(400, 32), vec4(5.0f), 1.0f);
checkpanel->color(vec4(0.0f)); checkpanel->color(vec4(0.0f));
checkpanel->orientation(Orientation::horizontal); checkpanel->orientation(Orientation::horizontal);
@@ -265,6 +265,25 @@ Panel* create_settings_panel(Engine* engine, PagesControl* menu) {
panel->add(checkpanel); panel->add(checkpanel);
} }
/* Backlight checkbox */{
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 engine->getSettings().graphics.backlight != 0;
});
checkbox->consumer([=](bool checked) {
engine->getSettings().graphics.backlight = checked;
});
checkpanel->add(checkbox);
checkpanel->add(new Label(L"Backlight"));
panel->add(checkpanel);
}
panel->add(gotoButton(L"Controls", "controls", menu)); panel->add(gotoButton(L"Controls", "controls", menu));
panel->add(backButton(menu)); panel->add(backButton(menu));
panel->refresh(); panel->refresh();
+6
View File
@@ -87,12 +87,14 @@ void MenuScreen::draw(float delta) {
batch->render(); batch->render();
} }
static bool backlight;
LevelScreen::LevelScreen(Engine* engine, Level* level) LevelScreen::LevelScreen(Engine* engine, Level* level)
: Screen(engine), : Screen(engine),
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);
backlight = engine->getSettings().graphics.backlight;
} }
LevelScreen::~LevelScreen() { LevelScreen::~LevelScreen() {
@@ -130,6 +132,10 @@ void LevelScreen::update(float delta) {
if (!gui->isFocusCaught()) { if (!gui->isFocusCaught()) {
updateHotkeys(); updateHotkeys();
} }
if (settings.graphics.backlight != backlight) {
level->chunks->clear();
backlight = settings.graphics.backlight;
}
level->updatePlayer(delta, !inputLocked, hud->isPause(), !inputLocked); level->updatePlayer(delta, !inputLocked, hud->isPause(), !inputLocked);
level->update(); level->update();
+1 -1
View File
@@ -35,7 +35,7 @@ using std::shared_ptr;
WorldRenderer::WorldRenderer(Engine* engine, Level* level, const ContentGfxCache* cache) WorldRenderer::WorldRenderer(Engine* engine, Level* level, const ContentGfxCache* cache)
: engine(engine), level(level) { : engine(engine), level(level) {
lineBatch = new LineBatch(4096); lineBatch = new LineBatch(4096);
renderer = new ChunksRenderer(level, cache); renderer = new ChunksRenderer(level, cache, engine->getSettings());
frustumCulling = new Frustum(); frustumCulling = new Frustum();
level->events->listen(EVT_CHUNK_HIDDEN, [this](lvl_event_type type, Chunk* chunk) { level->events->listen(EVT_CHUNK_HIDDEN, [this](lvl_event_type type, Chunk* chunk) {
renderer->unload(chunk); renderer->unload(chunk);
+5 -3
View File
@@ -21,13 +21,15 @@ using glm::vec4;
BlocksRenderer::BlocksRenderer(size_t capacity, BlocksRenderer::BlocksRenderer(size_t capacity,
const Content* content, const Content* content,
const ContentGfxCache* cache) const ContentGfxCache* cache,
const EngineSettings& settings)
: content(content), : content(content),
vertexOffset(0), vertexOffset(0),
indexOffset(0), indexOffset(0),
indexSize(0), indexSize(0),
capacity(capacity), capacity(capacity),
cache(cache) { cache(cache),
settings(settings) {
vertexBuffer = new float[capacity]; vertexBuffer = new float[capacity];
indexBuffer = new int[capacity]; indexBuffer = new int[capacity];
voxelsBuffer = new VoxelsVolume(CHUNK_W + 2, CHUNK_H, CHUNK_D + 2); voxelsBuffer = new VoxelsVolume(CHUNK_W + 2, CHUNK_H, CHUNK_D + 2);
@@ -353,7 +355,7 @@ void BlocksRenderer::render(const voxel* voxels, int atlas_size) {
Mesh* BlocksRenderer::render(const Chunk* chunk, int atlas_size, const ChunksStorage* chunks) { Mesh* BlocksRenderer::render(const Chunk* chunk, int atlas_size, const ChunksStorage* chunks) {
this->chunk = chunk; this->chunk = chunk;
voxelsBuffer->setPosition(chunk->x * CHUNK_W - 1, 0, chunk->z * CHUNK_D - 1); voxelsBuffer->setPosition(chunk->x * CHUNK_W - 1, 0, chunk->z * CHUNK_D - 1);
chunks->getVoxels(voxelsBuffer, true); chunks->getVoxels(voxelsBuffer, settings.graphics.backlight);
overflow = false; overflow = false;
vertexOffset = 0; vertexOffset = 0;
indexOffset = indexSize = 0; indexOffset = indexSize = 0;
+3 -1
View File
@@ -6,6 +6,7 @@
#include "UVRegion.h" #include "UVRegion.h"
#include "../typedefs.h" #include "../typedefs.h"
#include "../voxels/voxel.h" #include "../voxels/voxel.h"
#include "../settings.h"
class Content; class Content;
class Mesh; class Mesh;
@@ -31,6 +32,7 @@ class BlocksRenderer {
const Block* const* blockDefsCache; const Block* const* blockDefsCache;
const ContentGfxCache* const cache; const ContentGfxCache* const cache;
const EngineSettings& settings;
void vertex(const glm::vec3& coord, float u, float v, const glm::vec4& light); void vertex(const glm::vec3& coord, float u, float v, const glm::vec4& light);
void index(int a, int b, int c, int d, int e, int f); void index(int a, int b, int c, int d, int e, int f);
@@ -70,7 +72,7 @@ class BlocksRenderer {
glm::vec4 pickSoftLight(int x, int y, int z, const glm::ivec3& right, const glm::ivec3& up) const; glm::vec4 pickSoftLight(int x, int y, int z, const glm::ivec3& right, const glm::ivec3& up) const;
void render(const voxel* voxels, int atlas_size); void render(const voxel* voxels, int atlas_size);
public: public:
BlocksRenderer(size_t capacity, const Content* content, const ContentGfxCache* cache); BlocksRenderer(size_t capacity, const Content* content, const ContentGfxCache* cache, const EngineSettings& settings);
virtual ~BlocksRenderer(); virtual ~BlocksRenderer();
Mesh* render(const Chunk* chunk, int atlas_size, const ChunksStorage* chunks); Mesh* render(const Chunk* chunk, int atlas_size, const ChunksStorage* chunks);
+2 -2
View File
@@ -11,9 +11,9 @@
using glm::ivec2; using glm::ivec2;
using std::shared_ptr; using std::shared_ptr;
ChunksRenderer::ChunksRenderer(Level* level, const ContentGfxCache* cache) : level(level) { ChunksRenderer::ChunksRenderer(Level* level, const ContentGfxCache* cache, const EngineSettings& settings) : level(level) {
const int MAX_FULL_CUBES = 3000; const int MAX_FULL_CUBES = 3000;
renderer = new BlocksRenderer(9 * 6 * 6 * MAX_FULL_CUBES, level->content, cache); renderer = new BlocksRenderer(9 * 6 * 6 * MAX_FULL_CUBES, level->content, cache, settings);
} }
ChunksRenderer::~ChunksRenderer() { ChunksRenderer::~ChunksRenderer() {
+4 -1
View File
@@ -6,6 +6,7 @@
#include <glm/glm.hpp> #include <glm/glm.hpp>
#include "../voxels/Block.h" #include "../voxels/Block.h"
#include "../voxels/ChunksStorage.h" #include "../voxels/ChunksStorage.h"
#include "../settings.h"
class Mesh; class Mesh;
class Chunk; class Chunk;
@@ -18,7 +19,9 @@ class ChunksRenderer {
Level* level; Level* level;
std::unordered_map<glm::ivec2, std::shared_ptr<Mesh>> meshes; std::unordered_map<glm::ivec2, std::shared_ptr<Mesh>> meshes;
public: public:
ChunksRenderer(Level* level, const ContentGfxCache* cache); ChunksRenderer(Level* level,
const ContentGfxCache* cache,
const EngineSettings& settings);
virtual ~ChunksRenderer(); virtual ~ChunksRenderer();
std::shared_ptr<Mesh> render(Chunk* chunk); std::shared_ptr<Mesh> render(Chunk* chunk);
+2
View File
@@ -38,6 +38,8 @@ struct GraphicsSettings {
/* Fog opacity is calculated as `pow(depth*k, fogCurve)` where k depends on chunksLoadDistance. /* Fog opacity is calculated as `pow(depth*k, fogCurve)` where k depends on chunksLoadDistance.
Use values in range [1.0 - 2.0] where 1.0 is linear, 2.0 is quadratic */ Use values in range [1.0 - 2.0] where 1.0 is linear, 2.0 is quadratic */
float fogCurve = 1.6f; float fogCurve = 1.6f;
/* Enable blocks backlight to prevent complete darkness */
bool backlight = true;
}; };
struct DebugSettings { struct DebugSettings {