Hopefully fix the rare lightmap flicker
This commit is contained in:
parent
f3c7bd1d5e
commit
8181cff72e
@ -1403,7 +1403,7 @@ void WorldClient::collectLiquid(List<Vec2I> const& tilePositions, LiquidId liqui
|
|||||||
}
|
}
|
||||||
|
|
||||||
void WorldClient::waitForLighting(Image* out) {
|
void WorldClient::waitForLighting(Image* out) {
|
||||||
MutexLocker lock(m_lightingMutex);
|
MutexLocker lock(m_lightMapMutex);
|
||||||
if (out)
|
if (out)
|
||||||
*out = move(m_lightMap);
|
*out = move(m_lightMap);
|
||||||
}
|
}
|
||||||
@ -1648,22 +1648,18 @@ void WorldClient::lightingTileGather() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void WorldClient::lightingMain() {
|
void WorldClient::lightingMain() {
|
||||||
|
MutexLocker condLocker(m_lightingMutex);
|
||||||
while (true) {
|
while (true) {
|
||||||
MutexLocker locker(m_lightingMutex);
|
|
||||||
|
|
||||||
m_lightingCond.wait(m_lightingMutex);
|
m_lightingCond.wait(m_lightingMutex);
|
||||||
if (m_stopLightingThread)
|
if (m_stopLightingThread)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
MutexLocker mapLocker(m_lightMapMutex);
|
||||||
int64_t start = Time::monotonicMicroseconds();
|
int64_t start = Time::monotonicMicroseconds();
|
||||||
lightingTileGather();
|
lightingTileGather();
|
||||||
m_lightingCalculator.calculate(m_lightMap);
|
m_lightingCalculator.calculate(m_lightMap);
|
||||||
|
mapLocker.unlock();
|
||||||
LogMap::set("client_render_world_async_light_calc", strf(u8"{:05d}\u00b5s", Time::monotonicMicroseconds() - start));
|
LogMap::set("client_render_world_async_light_calc", strf(u8"{:05d}\u00b5s", Time::monotonicMicroseconds() - start));
|
||||||
|
|
||||||
continue;
|
|
||||||
|
|
||||||
locker.unlock();
|
|
||||||
Thread::yield();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,9 +269,10 @@ private:
|
|||||||
CellularLightingCalculator m_lightingCalculator;
|
CellularLightingCalculator m_lightingCalculator;
|
||||||
mutable CellularLightIntensityCalculator m_lightIntensityCalculator;
|
mutable CellularLightIntensityCalculator m_lightIntensityCalculator;
|
||||||
ThreadFunction<void> m_lightingThread;
|
ThreadFunction<void> m_lightingThread;
|
||||||
|
|
||||||
Mutex m_lightingMutex;
|
Mutex m_lightingMutex;
|
||||||
ConditionVariable m_lightingCond;
|
ConditionVariable m_lightingCond;
|
||||||
|
Mutex m_lightMapMutex;
|
||||||
Image m_lightMap;
|
Image m_lightMap;
|
||||||
atomic<bool> m_stopLightingThread;
|
atomic<bool> m_stopLightingThread;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user