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/StarWorldPainter.cpp | |
parent | 17ea975970d8f2be994bb1c8e7646f9c8a6c4647 (diff) |
Async lighting improvements
Diffstat (limited to 'source/rendering/StarWorldPainter.cpp')
-rw-r--r-- | source/rendering/StarWorldPainter.cpp | 13 |
1 files changed, 7 insertions, 6 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 |