diff --git a/doomsday/apps/client/src/render/modelloader.cpp b/doomsday/apps/client/src/render/modelloader.cpp index 497da39cb1..df84941de0 100644 --- a/doomsday/apps/client/src/render/modelloader.cpp +++ b/doomsday/apps/client/src/render/modelloader.cpp @@ -109,7 +109,8 @@ DE_PIMPL(ModelLoader) #endif // Everything should have been unloaded, because all models // have been destroyed at this point. - DE_ASSERT(empty()); + // (Does not apply during abnormal shutdown.) + //DE_ASSERT(empty()); } }; Programs programs; diff --git a/doomsday/libs/gloom/include/gloom/render/render.h b/doomsday/libs/gloom/include/gloom/render/render.h index d9efed7d49..b68b0cd19a 100644 --- a/doomsday/libs/gloom/include/gloom/render/render.h +++ b/doomsday/libs/gloom/include/gloom/render/render.h @@ -33,6 +33,8 @@ class Render Render(); virtual ~Render(); + bool isInitialized() const; + const Context &context() const; Context &context(); diff --git a/doomsday/libs/gloom/src/render/lightrender.cpp b/doomsday/libs/gloom/src/render/lightrender.cpp index 6e2ab957f4..096ceb10d2 100644 --- a/doomsday/libs/gloom/src/render/lightrender.cpp +++ b/doomsday/libs/gloom/src/render/lightrender.cpp @@ -424,8 +424,10 @@ void LightRender::render() } } -void LightRender::advanceTime(TimeSpan elapsed) +void LightRender::advanceTime(TimeSpan /*elapsed*/) { + DE_ASSERT(isInitialized()); + // Pick the shadow casters. d->selectShadowCasters(); diff --git a/doomsday/libs/gloom/src/render/maprender.cpp b/doomsday/libs/gloom/src/render/maprender.cpp index e3eca6babd..2197192403 100644 --- a/doomsday/libs/gloom/src/render/maprender.cpp +++ b/doomsday/libs/gloom/src/render/maprender.cpp @@ -243,6 +243,8 @@ void MapRender::setPlaneY(ID planeId, double destY, double srcY, double startTim void MapRender::advanceTime(TimeSpan elapsed) { + DE_ASSERT(isInitialized()); + d->lights.advanceTime(elapsed); // Testing: Scroll offsets. diff --git a/doomsday/libs/gloom/src/render/render.cpp b/doomsday/libs/gloom/src/render/render.cpp index 1cc83f91d1..836d4e9e9a 100644 --- a/doomsday/libs/gloom/src/render/render.cpp +++ b/doomsday/libs/gloom/src/render/render.cpp @@ -34,6 +34,11 @@ Render::~Render() DE_ASSERT(d->context == nullptr); } +bool Render::isInitialized() const +{ + return d->context != nullptr; +} + const Context &Render::context() const { DE_ASSERT(d->context); @@ -54,7 +59,6 @@ void Render::glInit(Context &context) void Render::glDeinit() { - DE_ASSERT(d->context != nullptr); d->context = nullptr; } diff --git a/doomsday/libs/gloom/src/world.cpp b/doomsday/libs/gloom/src/world.cpp index fd601a7f14..1fa5609481 100644 --- a/doomsday/libs/gloom/src/world.cpp +++ b/doomsday/libs/gloom/src/world.cpp @@ -137,6 +137,7 @@ DE_PIMPL(World), public Asset ~Impl() override { + glDeinit(); for (auto &a : textureAtlas) delete a; } @@ -296,10 +297,13 @@ void World::glDeinit() void World::update(TimeSpan elapsed) { - d->update(elapsed); - d->environ.advanceTime(elapsed); - d->mapRender.advanceTime(elapsed); - d->tonemap.advanceTime(elapsed); + if (d->isReady()) + { + d->update(elapsed); + d->environ.advanceTime(elapsed); + d->mapRender.advanceTime(elapsed); + d->tonemap.advanceTime(elapsed); + } } void World::render(const ICamera &camera)