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

summaryrefslogtreecommitdiff
path: root/source/rendering/StarWorldPainter.cpp
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-06-29 10:31:59 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-06-29 10:31:59 +1000
commitdc134e168bd04d39f8a30819ba3a0b00bb8ae1cb (patch)
tree1d44d013f4f4d2271f50203e63b072a6196fce31 /source/rendering/StarWorldPainter.cpp
parentafefd89533c87017bf3fac5ba7a1b6a316da1160 (diff)
Move lightmap wait into WorldPainter to fix single-frame lightmap lag-behind
unfortunate
Diffstat (limited to 'source/rendering/StarWorldPainter.cpp')
-rw-r--r--source/rendering/StarWorldPainter.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/source/rendering/StarWorldPainter.cpp b/source/rendering/StarWorldPainter.cpp
index a93a592..8e27006 100644
--- a/source/rendering/StarWorldPainter.cpp
+++ b/source/rendering/StarWorldPainter.cpp
@@ -64,6 +64,25 @@ void WorldPainter::render(WorldRenderData& renderData, function<void()> lightWai
m_environmentPainter->renderSky(Vec2F(m_camera.screenSize()), renderData.skyRenderData);
m_environmentPainter->renderFrontOrbiters(m_camera.pixelRatio(), Vec2F(m_camera.screenSize()), renderData.skyRenderData);
+ if (lightWaiter) {
+ int64_t start = Time::monotonicMilliseconds();
+ lightWaiter();
+ LogMap::set("render_light_wait", strf("{}ms", Time::monotonicMilliseconds() - 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);
+ 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
auto parallaxDelta = m_camera.worldGeometry().diff(m_camera.centerWorldPosition(), m_previousCameraCenter);