This commit is contained in:
Rachael Alexanderson 2016-12-26 15:46:44 -05:00
commit d8df255438
6 changed files with 37 additions and 10 deletions

View file

@ -594,7 +594,6 @@ void ADynamicLight::CollectWithinRadius(const DVector3 &opos, subsector_t *subSe
for (unsigned i = 0; i < collected_ss.Size(); i++) for (unsigned i = 0; i < collected_ss.Size(); i++)
{ {
subSec = collected_ss[i].sub; subSec = collected_ss[i].sub;
auto &pos = collected_ss[i].pos;
touching_subsectors = AddLightNode(&subSec->lighthead, subSec, this, touching_subsectors); touching_subsectors = AddLightNode(&subSec->lighthead, subSec, this, touching_subsectors);
if (subSec->sector->validcount != ::validcount) if (subSec->sector->validcount != ::validcount)
@ -603,9 +602,10 @@ void ADynamicLight::CollectWithinRadius(const DVector3 &opos, subsector_t *subSe
subSec->sector->validcount = ::validcount; subSec->sector->validcount = ::validcount;
} }
for (unsigned int i = 0; i < subSec->numlines; i++) for (unsigned int j = 0; j < subSec->numlines; ++j)
{ {
seg_t * seg = subSec->firstline + i; auto &pos = collected_ss[i].pos;
seg_t *seg = subSec->firstline + j;
// check distance from x/y to seg and if within radius add this seg and, if present the opposing subsector (lather/rinse/repeat) // check distance from x/y to seg and if within radius add this seg and, if present the opposing subsector (lather/rinse/repeat)
// If out of range we do not need to bother with this seg. // If out of range we do not need to bother with this seg.

View file

@ -196,14 +196,30 @@ int gl_CalcLightLevel(int lightlevel, int rellight, bool weapon)
if ((glset.lightmode & 2) && lightlevel < 192 && !weapon) if ((glset.lightmode & 2) && lightlevel < 192 && !weapon)
{ {
light = xs_CRoundToInt(192.f - (192-lightlevel)* 1.95f); if (lightlevel > 100)
{
light = xs_CRoundToInt(192.f - (192 - lightlevel)* 1.87f);
if (light + rellight < 20)
{
light = 20 + (light + rellight - 20) / 5;
} }
else else
{ {
light=lightlevel; light += rellight;
}
}
else
{
light = (lightlevel + rellight) / 5;
} }
return clamp(light+rellight, 0, 255); }
else
{
light=lightlevel+rellight;
}
return clamp(light, 0, 255);
} }
//========================================================================== //==========================================================================

View file

@ -363,8 +363,12 @@ static inline void RenderThings(subsector_t * sub, sector_t * sector)
SetupSprite.Clock(); SetupSprite.Clock();
sector_t * sec=sub->sector; sector_t * sec=sub->sector;
// Handle all things in sector. // Handle all things in sector.
for (AActor * thing = sec->thinglist; thing; thing = thing->snext) for (auto p = sec->touching_renderthings; p != nullptr; p = p->m_snext)
{ {
auto thing = p->m_thing;
if (thing->validcount == validcount) continue;
thing->validcount = validcount;
FIntCVar *cvar = thing->GetClass()->distancecheck; FIntCVar *cvar = thing->GetClass()->distancecheck;
if (cvar != NULL && *cvar >= 0) if (cvar != NULL && *cvar >= 0)
{ {
@ -378,6 +382,7 @@ static inline void RenderThings(subsector_t * sub, sector_t * sector)
GLRenderer->ProcessSprite(thing, sector, false); GLRenderer->ProcessSprite(thing, sector, false);
} }
for (msecnode_t *node = sec->render_thinglist; node; node = node->m_snext) for (msecnode_t *node = sec->render_thinglist; node; node = node->m_snext)
{ {
AActor *thing = node->m_thing; AActor *thing = node->m_thing;

View file

@ -91,6 +91,7 @@ extern bool r_showviewer;
DWORD gl_fixedcolormap; DWORD gl_fixedcolormap;
area_t in_area; area_t in_area;
TArray<BYTE> currentmapsection; TArray<BYTE> currentmapsection;
int camtexcount;
void gl_ParseDefs(); void gl_ParseDefs();
@ -1356,6 +1357,7 @@ void FGLInterface::RenderTextureView (FCanvasTexture *tex, AActor *Viewpoint, in
} }
tex->SetUpdated(); tex->SetUpdated();
camtexcount++;
} }
//========================================================================== //==========================================================================

View file

@ -207,22 +207,25 @@ void OpenGLFrameBuffer::Update()
// //
//========================================================================== //==========================================================================
CVAR(Bool, gl_finishbeforeswap, false, 0); CVAR(Bool, gl_finishbeforeswap, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG);
extern int camtexcount;
void OpenGLFrameBuffer::Swap() void OpenGLFrameBuffer::Swap()
{ {
bool swapbefore = gl_finishbeforeswap && camtexcount == 0;
Finish.Reset(); Finish.Reset();
Finish.Clock(); Finish.Clock();
if (gl_finishbeforeswap) glFinish(); if (swapbefore) glFinish();
if (needsetgamma) if (needsetgamma)
{ {
//DoSetGamma(); //DoSetGamma();
needsetgamma = false; needsetgamma = false;
} }
SwapBuffers(); SwapBuffers();
if (!gl_finishbeforeswap) glFinish(); if (!swapbefore) glFinish();
Finish.Unclock(); Finish.Unclock();
swapped = true; swapped = true;
camtexcount = 0;
FHardwareTexture::UnbindAll(); FHardwareTexture::UnbindAll();
mDebug->Update(); mDebug->Update();
} }

View file

@ -5,6 +5,7 @@ class DynamicLight : Actor native
Height 0; Height 0;
Radius 0.1; Radius 0.1;
FloatBobPhase 0; FloatBobPhase 0;
RenderRadius -1;
+NOBLOCKMAP +NOBLOCKMAP
+NOGRAVITY +NOGRAVITY
+FIXMAPTHINGPOS +FIXMAPTHINGPOS