further remove manual memory management

This commit is contained in:
Ricardo Luís Vaz Silva 2025-04-16 23:36:57 -03:00
commit a43b99bf51
9 changed files with 36 additions and 45 deletions

View file

@ -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;
};
//============================================================================

View file

@ -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);
}
}

View file

@ -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;

View file

@ -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;

View file

@ -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))

View file

@ -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())

View file

@ -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())

View file

@ -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))

View file

@ -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;