diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-03-19 18:21:54 +1100 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-03-19 18:21:54 +1100 |
commit | 983bb82a96707ae81be5c35e7f9af700ade7d77e (patch) | |
tree | 7594648ca829fc8b4c958d02f86b9cc22b04f5d7 /source/rendering | |
parent | 17ea975970d8f2be994bb1c8e7646f9c8a6c4647 (diff) |
Async lighting improvements
Diffstat (limited to 'source/rendering')
-rw-r--r-- | source/rendering/StarWorldPainter.cpp | 13 | ||||
-rw-r--r-- | source/rendering/StarWorldPainter.hpp | 2 |
2 files changed, 8 insertions, 7 deletions
diff --git a/source/rendering/StarWorldPainter.cpp b/source/rendering/StarWorldPainter.cpp index 15fb9b9..c55f372 100644 --- a/source/rendering/StarWorldPainter.cpp +++ b/source/rendering/StarWorldPainter.cpp @@ -49,7 +49,7 @@ void WorldPainter::update(float dt) { m_environmentPainter->update(dt); } -void WorldPainter::render(WorldRenderData& renderData, function<void()> lightWaiter) { +void WorldPainter::render(WorldRenderData& renderData, function<bool()> lightWaiter) { m_camera.setScreenSize(m_renderer->screenSize()); m_camera.setTargetPixelRatio(Root::singleton().configuration()->get("zoomLevel").toFloat()); @@ -76,23 +76,24 @@ void WorldPainter::render(WorldRenderData& renderData, function<void()> lightWai m_renderer->flush(); + bool lightMapUpdated = false; if (lightWaiter) { auto start = Time::monotonicMicroseconds(); - lightWaiter(); + lightMapUpdated = lightWaiter(); LogMap::set("client_render_world_async_light_wait", strf(u8"{:05d}\u00b5s", Time::monotonicMicroseconds() - start)); } if (renderData.isFullbright) { m_renderer->setEffectTexture("lightMap", Image::filled(Vec2U(1, 1), { 255, 255, 255, 255 }, PixelFormat::RGB24)); - m_renderer->setEffectTexture("tileLightMap", Image::filled(Vec2U(1, 1), { 0, 0, 0, 0 }, PixelFormat::RGBA32)); m_renderer->setEffectParameter("lightMapMultiplier", 1.0f); } else { - adjustLighting(renderData); + if (lightMapUpdated) { + adjustLighting(renderData); + m_renderer->setEffectTexture("lightMap", renderData.lightMap); + } m_renderer->setEffectParameter("lightMapMultiplier", m_assets->json("/rendering.config:lightMapMultiplier").toFloat()); m_renderer->setEffectParameter("lightMapScale", Vec2F::filled(TilePixels * m_camera.pixelRatio())); m_renderer->setEffectParameter("lightMapOffset", m_camera.worldToScreen(Vec2F(renderData.lightMinPosition))); - m_renderer->setEffectTexture("lightMap", renderData.lightMap); - m_renderer->setEffectTexture("tileLightMap", renderData.tileLightMap); } // Parallax layers diff --git a/source/rendering/StarWorldPainter.hpp b/source/rendering/StarWorldPainter.hpp index 43ce83c..6cf53e2 100644 --- a/source/rendering/StarWorldPainter.hpp +++ b/source/rendering/StarWorldPainter.hpp @@ -23,7 +23,7 @@ public: WorldCamera& camera(); void update(float dt); - void render(WorldRenderData& renderData, function<void()> lightWaiter); + void render(WorldRenderData& renderData, function<bool()> lightWaiter); void adjustLighting(WorldRenderData& renderData); private: |