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

summaryrefslogtreecommitdiff
path: root/source/rendering
diff options
context:
space:
mode:
Diffstat (limited to 'source/rendering')
-rw-r--r--source/rendering/StarTilePainter.cpp5
-rw-r--r--source/rendering/StarWorldPainter.cpp18
-rw-r--r--source/rendering/StarWorldPainter.hpp3
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);