further remove manual memory management
This commit is contained in:
parent
bac018d306
commit
a43b99bf51
9 changed files with 36 additions and 45 deletions
|
|
@ -57,11 +57,12 @@
|
|||
#include "doom_aabbtree.h"
|
||||
#include "doom_levelmesh.h"
|
||||
#include "p_visualthinker.h"
|
||||
#include <memory>
|
||||
|
||||
struct FGlobalDLightLists
|
||||
{
|
||||
TMap<FSection*, TMap<FDynamicLight*, FLightNode*>> flat_dlist;
|
||||
TMap<side_t*, TMap<FDynamicLight*, FLightNode*>> wall_dlist;
|
||||
TMap<FSection*, TMap<FDynamicLight*, std::unique_ptr<FLightNode>>> flat_dlist;
|
||||
TMap<side_t*, TMap<FDynamicLight*, std::unique_ptr<FLightNode>>> wall_dlist;
|
||||
};
|
||||
|
||||
//============================================================================
|
||||
|
|
|
|||
|
|
@ -458,9 +458,9 @@ void FDynamicLight::AddLightNode(FSection *section, side_t *sidedef)
|
|||
node->lightsource = this;
|
||||
node->targ = section;
|
||||
|
||||
TMap<FDynamicLight *, FLightNode *> u;
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>> u;
|
||||
u.TryEmplace(this, node);
|
||||
Level->lightlists.flat_dlist.TryEmplace(section, u);
|
||||
Level->lightlists.flat_dlist.TryEmplace(section, std::move(u));
|
||||
updateFlatTList(section);
|
||||
}
|
||||
}
|
||||
|
|
@ -485,9 +485,9 @@ void FDynamicLight::AddLightNode(FSection *section, side_t *sidedef)
|
|||
node->lightsource = this;
|
||||
node->targ = sidedef;
|
||||
|
||||
TMap<FDynamicLight *, FLightNode *> u;
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>> u;
|
||||
u.TryEmplace(this, node);
|
||||
Level->lightlists.wall_dlist.TryEmplace(sidedef, u);
|
||||
Level->lightlists.wall_dlist.TryEmplace(sidedef, std::move(u));
|
||||
updateWallTList(sidedef);
|
||||
}
|
||||
}
|
||||
|
|
@ -696,12 +696,7 @@ void FDynamicLight::UnlinkLight ()
|
|||
auto wallLightList = Level->lightlists.wall_dlist.CheckKey(sidedef);
|
||||
if (wallLightList)
|
||||
{
|
||||
auto light = *wallLightList->CheckKey(this);
|
||||
if (light)
|
||||
{
|
||||
delete light;
|
||||
wallLightList->Remove(this);
|
||||
}
|
||||
wallLightList->Remove(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -715,12 +710,7 @@ void FDynamicLight::UnlinkLight ()
|
|||
auto flatLightList = Level->lightlists.flat_dlist.CheckKey(sec);
|
||||
if (flatLightList)
|
||||
{
|
||||
auto light = *flatLightList->CheckKey(this);
|
||||
if (light)
|
||||
{
|
||||
delete light;
|
||||
flatLightList->Remove(this);
|
||||
}
|
||||
flatLightList->Remove(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -163,11 +163,11 @@ void HWFlat::SetupLights(HWDrawInfo *di, FDynLightData &lightdata, int portalgro
|
|||
|
||||
if (flatLightList)
|
||||
{
|
||||
TMap<FDynamicLight *, FLightNode *>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, FLightNode *>::Pair *pair;
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Pair *pair;
|
||||
while (it.NextPair(pair))
|
||||
{
|
||||
auto node = pair->Value;
|
||||
auto node = pair->Value.get();
|
||||
if (!node) continue;
|
||||
|
||||
FDynamicLight * light = node->lightsource;
|
||||
|
|
|
|||
|
|
@ -121,11 +121,11 @@ int HWDrawInfo::SetupLightsForOtherPlane(subsector_t * sub, FDynLightData &light
|
|||
|
||||
if (flatLightList)
|
||||
{
|
||||
TMap<FDynamicLight *, FLightNode *>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, FLightNode *>::Pair *pair;
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Pair *pair;
|
||||
while (it.NextPair(pair))
|
||||
{
|
||||
auto node = pair->Value;
|
||||
auto node = pair->Value.get();
|
||||
if (!node) continue;
|
||||
|
||||
FDynamicLight * light = node->lightsource;
|
||||
|
|
|
|||
|
|
@ -128,11 +128,11 @@ void HWDrawInfo::GetDynSpriteLight(AActor *self, float x, float y, float z, FSec
|
|||
|
||||
if (flatLightList)
|
||||
{
|
||||
TMap<FDynamicLight *, FLightNode *>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, FLightNode *>::Pair *pair;
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Pair *pair;
|
||||
while (it.NextPair(pair))
|
||||
{
|
||||
auto node = pair->Value;
|
||||
auto node = pair->Value.get();
|
||||
if (!node) continue;
|
||||
|
||||
light=node->lightsource;
|
||||
|
|
@ -253,11 +253,11 @@ void hw_GetDynModelLight(AActor *self, FDynLightData &modellightdata)
|
|||
auto flatLightList = self->Level->lightlists.flat_dlist.CheckKey(subsector->section);
|
||||
if (flatLightList)
|
||||
{
|
||||
TMap<FDynamicLight *, FLightNode *>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, FLightNode *>::Pair *pair;
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Pair *pair;
|
||||
while (it.NextPair(pair))
|
||||
{ // check all lights touching a subsector
|
||||
auto node = pair->Value;
|
||||
auto node = pair->Value.get();
|
||||
if (!node) continue;
|
||||
FDynamicLight *light = node->lightsource;
|
||||
if (light->ShouldLightActor(self))
|
||||
|
|
|
|||
|
|
@ -431,11 +431,11 @@ void HWWall::SetupLights(HWDrawInfo*di, FDynLightData &lightdata)
|
|||
|
||||
if (flatLightList)
|
||||
{
|
||||
TMap<FDynamicLight *, FLightNode *>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, FLightNode *>::Pair *pair;
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Pair *pair;
|
||||
while (it.NextPair(pair))
|
||||
{
|
||||
auto node = pair->Value;
|
||||
auto node = pair->Value.get();
|
||||
if (!node) continue;
|
||||
|
||||
if (node->lightsource->IsActive() && !node->lightsource->DontLightMap())
|
||||
|
|
@ -496,11 +496,11 @@ void HWWall::SetupLights(HWDrawInfo*di, FDynLightData &lightdata)
|
|||
|
||||
if (wallLightList)
|
||||
{
|
||||
TMap<FDynamicLight *, FLightNode *>::Iterator it(*wallLightList);
|
||||
TMap<FDynamicLight *, FLightNode *>::Pair *pair;
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Iterator it(*wallLightList);
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Pair *pair;
|
||||
while (it.NextPair(pair))
|
||||
{
|
||||
auto node = pair->Value;
|
||||
auto node = pair->Value.get();
|
||||
if (!node) continue;
|
||||
|
||||
if (node->lightsource->IsActive() && !node->lightsource->DontLightMap())
|
||||
|
|
|
|||
|
|
@ -227,11 +227,11 @@ namespace swrenderer
|
|||
auto wallLightList = Level->lightlists.wall_dlist.CheckKey(curline->sidedef);
|
||||
if (wallLightList)
|
||||
{
|
||||
TMap<FDynamicLight *, FLightNode *>::Iterator it(*wallLightList);
|
||||
TMap<FDynamicLight *, FLightNode *>::Pair *pair;
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Iterator it(*wallLightList);
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Pair *pair;
|
||||
while (it.NextPair(pair))
|
||||
{
|
||||
auto node = pair->Value;
|
||||
auto node = pair->Value.get();
|
||||
if (!node) continue;
|
||||
|
||||
if (node->lightsource->IsActive())
|
||||
|
|
|
|||
|
|
@ -79,11 +79,11 @@ namespace swrenderer
|
|||
auto flatLightList = Level->lightlists.flat_dlist.CheckKey(sec);
|
||||
if (flatLightList)
|
||||
{
|
||||
TMap<FDynamicLight *, FLightNode *>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, FLightNode *>::Pair *pair;
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Pair *pair;
|
||||
while (it.NextPair(pair))
|
||||
{
|
||||
auto node = pair->Value;
|
||||
auto node = pair->Value.get();
|
||||
if (!node) continue;
|
||||
|
||||
if (node->lightsource->IsActive() && (height.PointOnSide(node->lightsource->Pos) > 0))
|
||||
|
|
|
|||
|
|
@ -212,11 +212,11 @@ namespace swrenderer
|
|||
auto flatLightList = Level->lightlists.flat_dlist.CheckKey(vis->section);
|
||||
if (flatLightList)
|
||||
{
|
||||
TMap<FDynamicLight *, FLightNode *>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, FLightNode *>::Pair *pair;
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Iterator it(*flatLightList);
|
||||
TMap<FDynamicLight *, std::unique_ptr<FLightNode>>::Pair *pair;
|
||||
while (it.NextPair(pair))
|
||||
{
|
||||
auto node = pair->Value;
|
||||
auto node = pair->Value.get();
|
||||
if (!node) continue;
|
||||
|
||||
FDynamicLight *light = node->lightsource;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue