diff options
Diffstat (limited to 'source/rendering')
-rw-r--r-- | source/rendering/StarTilePainter.cpp | 5 | ||||
-rw-r--r-- | source/rendering/StarWorldPainter.cpp | 18 | ||||
-rw-r--r-- | source/rendering/StarWorldPainter.hpp | 3 |
3 files changed, 10 insertions, 16 deletions
diff --git a/source/rendering/StarTilePainter.cpp b/source/rendering/StarTilePainter.cpp index 68e1110..fc115e5 100644 --- a/source/rendering/StarTilePainter.cpp +++ b/source/rendering/StarTilePainter.cpp @@ -38,7 +38,8 @@ void TilePainter::adjustLighting(WorldRenderData& renderData) const { RectI lightRange = RectI::withSize(renderData.lightMinPosition, Vec2I(renderData.lightMap.size())); forEachRenderTile(renderData, lightRange, [&](Vec2I const& pos, RenderTile const& tile) { // Only adjust lighting for full tiles - if (liquidDrawLevel(byteToFloat(tile.liquidLevel)) < 1.0f) + float drawLevel = liquidDrawLevel(byteToFloat(tile.liquidLevel)); + if (drawLevel == 0.0f) return; auto lightIndex = Vec2U(pos - renderData.lightMinPosition); @@ -46,7 +47,7 @@ void TilePainter::adjustLighting(WorldRenderData& renderData) const { auto const& liquid = m_liquids[tile.liquidId]; Vec3F tileLight = Vec3F(lightValue); - float darknessLevel = (1 - tileLight.sum() / (3.0f * 255.0f)); + float darknessLevel = (1 - tileLight.sum() / (3.0f * 255.0f)) * drawLevel; lightValue = Vec3B(tileLight.piecewiseMultiply(Vec3F::filled(1 - darknessLevel) + liquid.bottomLightMix * darknessLevel)); renderData.lightMap.set(lightIndex, lightValue); diff --git a/source/rendering/StarWorldPainter.cpp b/source/rendering/StarWorldPainter.cpp index 7cb7c72..a93a592 100644 --- a/source/rendering/StarWorldPainter.cpp +++ b/source/rendering/StarWorldPainter.cpp @@ -45,7 +45,7 @@ WorldCamera& WorldPainter::camera() { return m_camera; } -void WorldPainter::render(WorldRenderData& renderData) { +void WorldPainter::render(WorldRenderData& renderData, function<void()> lightWaiter) { m_camera.setScreenSize(m_renderer->screenSize()); m_camera.setTargetPixelRatio(Root::singleton().configuration()->get("zoomLevel").toFloat()); @@ -55,18 +55,6 @@ void WorldPainter::render(WorldRenderData& renderData) { m_tilePainter->setup(m_camera, renderData); - if (renderData.isFullbright) { - m_renderer->setEffectTexture("lightMap", Image::filled(Vec2U(1, 1), {255, 255, 255, 255}, PixelFormat::RGB24)); - m_renderer->setEffectParameter("lightMapMultiplier", 1.0f); - } else { - m_tilePainter->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); - } - // Stars, Debris Fields, Sky, and Orbiters m_environmentPainter->renderStars(m_camera.pixelRatio(), Vec2F(m_camera.screenSize()), renderData.skyRenderData); @@ -146,6 +134,10 @@ void WorldPainter::render(WorldRenderData& renderData) { m_tilePainter->cleanup(); } +void WorldPainter::adjustLighting(WorldRenderData& renderData) { + m_tilePainter->adjustLighting(renderData); +} + void WorldPainter::renderParticles(WorldRenderData& renderData, Particle::Layer layer) { const int textParticleFontSize = m_assets->json("/rendering.config:textParticleFontSize").toInt(); const RectF particleRenderWindow = RectF::withSize(Vec2F(), Vec2F(m_camera.screenSize())).padded(m_assets->json("/rendering.config:particleRenderWindowPadding").toInt()); diff --git a/source/rendering/StarWorldPainter.hpp b/source/rendering/StarWorldPainter.hpp index dac94fd..0ae6a7d 100644 --- a/source/rendering/StarWorldPainter.hpp +++ b/source/rendering/StarWorldPainter.hpp @@ -23,7 +23,8 @@ public: WorldCamera& camera(); - void render(WorldRenderData& renderData); + void render(WorldRenderData& renderData, function<void()> lightWaiter); + void adjustLighting(WorldRenderData& renderData); private: void renderParticles(WorldRenderData& renderData, Particle::Layer layer); |