Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/client
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2024-03-20 01:53:34 +1100
committerKae <80987908+Novaenia@users.noreply.github.com>2024-03-20 01:53:34 +1100
commit6d76a11e256cd96c9cdd7ae5a10c0276e6347277 (patch)
treed52459889408115d1e0eb657a05dc58e098e50eb /source/client
parent58a346e563df12af9194c198c7ffe974411abb28 (diff)
experiment: unclamped lighting
Diffstat (limited to 'source/client')
-rw-r--r--source/client/StarClientApplication.cpp70
-rw-r--r--source/client/StarClientApplication.hpp4
2 files changed, 39 insertions, 35 deletions
diff --git a/source/client/StarClientApplication.cpp b/source/client/StarClientApplication.cpp
index 54c78b3..e97a8b7 100644
--- a/source/client/StarClientApplication.cpp
+++ b/source/client/StarClientApplication.cpp
@@ -228,35 +228,8 @@ void ClientApplication::applicationInit(ApplicationControllerPtr appController)
void ClientApplication::renderInit(RendererPtr renderer) {
Application::renderInit(renderer);
- auto assets = m_root->assets();
-
- auto loadEffectConfig = [&](String const& name) {
- String path = strf("/rendering/effects/{}.config", name);
- if (assets->assetExists(path)) {
- StringMap<String> shaders;
- auto config = assets->json(path);
- auto shaderConfig = config.getObject("effectShaders");
- for (auto& entry : shaderConfig) {
- if (entry.second.isType(Json::Type::String)) {
- String shader = entry.second.toString();
- if (!shader.hasChar('\n')) {
- auto shaderBytes = assets->bytes(AssetPath::relativeTo(path, shader));
- shader = std::string(shaderBytes->ptr(), shaderBytes->size());
- }
- shaders[entry.first] = shader;
- }
- }
-
- renderer->loadEffectConfig(name, config, shaders);
- }
- else
- Logger::warn("No rendering config found for renderer with id '{}'", renderer->rendererId());
- };
-
- renderer->loadConfig(assets->json("/rendering/opengl20.config"));
-
- loadEffectConfig("world");
- loadEffectConfig("interface");
+ renderReload();
+ m_root->registerReloadListener(m_reloadListener = make_shared<CallbackListener>([this]() { renderReload(); }));
if (m_root->configuration()->get("limitTextureAtlasSize").optBool().value(false))
renderer->setSizeLimitEnabled(true);
@@ -427,12 +400,7 @@ void ClientApplication::render() {
auto paintStart = Time::monotonicMicroseconds();
m_worldPainter->render(m_renderData, [&]() -> bool {
- if (auto newMinPosition = worldClient->waitForLighting(&m_renderData.lightMap)) {
- m_renderData.lightMinPosition = *newMinPosition;
- return true;
- } else {
- return false;
- }
+ return worldClient->waitForLighting(&m_renderData);
});
LogMap::set("client_render_world_painter", strf(u8"{:05d}\u00b5s", Time::monotonicMicroseconds() - paintStart));
LogMap::set("client_render_world_total", strf(u8"{:05d}\u00b5s", Time::monotonicMicroseconds() - totalStart));
@@ -458,6 +426,38 @@ void ClientApplication::getAudioData(int16_t* sampleData, size_t frameCount) {
}
}
+void ClientApplication::renderReload() {
+ auto assets = m_root->assets();
+ auto renderer = Application::renderer();
+
+ auto loadEffectConfig = [&](String const& name) {
+ String path = strf("/rendering/effects/{}.config", name);
+ if (assets->assetExists(path)) {
+ StringMap<String> shaders;
+ auto config = assets->json(path);
+ auto shaderConfig = config.getObject("effectShaders");
+ for (auto& entry : shaderConfig) {
+ if (entry.second.isType(Json::Type::String)) {
+ String shader = entry.second.toString();
+ if (!shader.hasChar('\n')) {
+ auto shaderBytes = assets->bytes(AssetPath::relativeTo(path, shader));
+ shader = std::string(shaderBytes->ptr(), shaderBytes->size());
+ }
+ shaders[entry.first] = shader;
+ }
+ }
+
+ renderer->loadEffectConfig(name, config, shaders);
+ } else
+ Logger::warn("No rendering config found for renderer with id '{}'", renderer->rendererId());
+ };
+
+ renderer->loadConfig(assets->json("/rendering/opengl20.config"));
+
+ loadEffectConfig("world");
+ loadEffectConfig("interface");
+}
+
void ClientApplication::changeState(MainAppState newState) {
MainAppState oldState = m_state;
m_state = newState;
diff --git a/source/client/StarClientApplication.hpp b/source/client/StarClientApplication.hpp
index 6f80349..5670595 100644
--- a/source/client/StarClientApplication.hpp
+++ b/source/client/StarClientApplication.hpp
@@ -53,6 +53,8 @@ private:
String password;
};
+ void renderReload();
+
void changeState(MainAppState newState);
void setError(String const& error);
void setError(String const& error, std::exception const& e);
@@ -71,6 +73,8 @@ private:
RootUPtr m_root;
ThreadFunction<void> m_rootLoader;
+ CallbackListenerPtr m_reloadListener;
+
MainAppState m_state = MainAppState::Startup;
// Valid after applicationInit is called