mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-02-21 11:21:04 +00:00
- fixed one frame activation delay for dynamic lights.
We cannot check HasDynamicLights in ProcessThinkers because it gets set too late.
This commit is contained in:
parent
6c12a8de12
commit
702b75e96a
1 changed files with 16 additions and 5 deletions
|
@ -43,7 +43,8 @@
|
||||||
#include "g_levellocals.h"
|
#include "g_levellocals.h"
|
||||||
#include "a_dynlight.h"
|
#include "a_dynlight.h"
|
||||||
#include "v_video.h"
|
#include "v_video.h"
|
||||||
|
#include "g_cvars.h"
|
||||||
|
#include "d_main.h"
|
||||||
|
|
||||||
static int ThinkCount;
|
static int ThinkCount;
|
||||||
static cycle_t ThinkCycles;
|
static cycle_t ThinkCycles;
|
||||||
|
@ -107,6 +108,18 @@ void FThinkerCollection::RunThinkers(FLevelLocals *Level)
|
||||||
|
|
||||||
ThinkCycles.Clock();
|
ThinkCycles.Clock();
|
||||||
|
|
||||||
|
bool dolights;
|
||||||
|
if ((gl_lights && vid_rendermode == 4) || (r_dynlights && vid_rendermode != 4))
|
||||||
|
{
|
||||||
|
dolights = Level->lights || (Level->flags3 & LEVEL3_LIGHTCREATED);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dolights = false;
|
||||||
|
}
|
||||||
|
Level->flags3 &= ~LEVEL3_LIGHTCREATED;
|
||||||
|
|
||||||
|
|
||||||
auto recreateLights = [=]() {
|
auto recreateLights = [=]() {
|
||||||
auto it = Level->GetThinkerIterator<AActor>();
|
auto it = Level->GetThinkerIterator<AActor>();
|
||||||
|
|
||||||
|
@ -144,9 +157,8 @@ void FThinkerCollection::RunThinkers(FLevelLocals *Level)
|
||||||
}
|
}
|
||||||
} while (count != 0);
|
} while (count != 0);
|
||||||
|
|
||||||
if (Level->lights || (Level->flags3 & LEVEL3_LIGHTCREATED))
|
if (dolights)
|
||||||
{
|
{
|
||||||
Level->flags3 &= ~LEVEL3_LIGHTCREATED;
|
|
||||||
recreateLights();
|
recreateLights();
|
||||||
for (auto light = Level->lights; light;)
|
for (auto light = Level->lights; light;)
|
||||||
{
|
{
|
||||||
|
@ -175,9 +187,8 @@ void FThinkerCollection::RunThinkers(FLevelLocals *Level)
|
||||||
}
|
}
|
||||||
} while (count != 0);
|
} while (count != 0);
|
||||||
|
|
||||||
if (Level->lights || (Level->flags3 & LEVEL3_LIGHTCREATED))
|
if (dolights)
|
||||||
{
|
{
|
||||||
Level->flags3 &= ~LEVEL3_LIGHTCREATED;
|
|
||||||
recreateLights();
|
recreateLights();
|
||||||
// Also profile the internal dynamic lights, even though they are not implemented as thinkers.
|
// Also profile the internal dynamic lights, even though they are not implemented as thinkers.
|
||||||
auto &prof = Profiles[NAME_InternalDynamicLight];
|
auto &prof = Profiles[NAME_InternalDynamicLight];
|
||||||
|
|
Loading…
Reference in a new issue