Move levelmeshhelper completely out of the Common folder

Connect the level updates to the level mesh
This commit is contained in:
Magnus Norddahl 2024-08-11 18:34:03 +02:00
commit e0cba77646
7 changed files with 78 additions and 23 deletions

View file

@ -823,6 +823,7 @@ set (PCH_SOURCES
st_stuff.cpp
r_data/v_palette.cpp
wi_stuff.cpp
levelmeshhelper.cpp
gamedata/a_keys.cpp
gamedata/a_weapons.cpp
gamedata/decallib.cpp

View file

@ -1,29 +1,8 @@
#include "levelmeshhelper.h"
#include "hw_meshbuilder.h"
#include "hw_mesh.h"
#include "v_video.h"
struct NullLevelMeshUpdater : UpdateLevelMesh
{
virtual void FloorHeightChanged(struct sector_t *sector) {};
virtual void CeilingHeightChanged(struct sector_t *sector) {};
virtual void MidTex3DHeightChanged(struct sector_t *sector) {};
virtual void FloorTextureChanged(struct sector_t *sector) {};
virtual void CeilingTextureChanged(struct sector_t *sector) {};
virtual void SectorChangedOther(struct sector_t *sector) {};
virtual void SideTextureChanged(struct side_t *side, int section) {};
};
static NullLevelMeshUpdater nullUpdater;
UpdateLevelMesh* LevelMeshUpdater = &nullUpdater;
MeshBuilder::MeshBuilder()
{
Reset();

25
src/levelmeshhelper.cpp Normal file
View file

@ -0,0 +1,25 @@
#include "levelmeshhelper.h"
struct NullLevelMeshUpdater : UpdateLevelMesh
{
virtual void FloorHeightChanged(struct sector_t* sector) {};
virtual void CeilingHeightChanged(struct sector_t* sector) {};
virtual void MidTex3DHeightChanged(struct sector_t* sector) {};
virtual void FloorTextureChanged(struct sector_t* sector) {};
virtual void CeilingTextureChanged(struct sector_t* sector) {};
virtual void SectorChangedOther(struct sector_t* sector) {};
virtual void SideTextureChanged(struct side_t* side, int section) {};
};
static NullLevelMeshUpdater nullUpdater;
UpdateLevelMesh* LevelMeshUpdater = &nullUpdater;
void SetNullLevelMeshUpdater()
{
LevelMeshUpdater = &nullUpdater;
}

View file

@ -17,3 +17,5 @@ struct UpdateLevelMesh
};
extern UpdateLevelMesh* LevelMeshUpdater;
void SetNullLevelMeshUpdater();

View file

@ -3203,6 +3203,8 @@ bool MapLoader::LoadLightmap(MapData* map)
void MapLoader::LoadLevel(MapData *map, const char *lumpname, int position)
{
SetNullLevelMeshUpdater();
const int *oldvertextable = nullptr;
// Reset defaults for lightmapping
@ -3544,4 +3546,6 @@ void MapLoader::LoadLevel(MapData *map, const char *lumpname, int position)
seg++;
}
}
LevelMeshUpdater = Level->levelMesh; // Start tracking level changes
}

View file

@ -381,6 +381,41 @@ void DoomLevelMesh::FreeFlat(FLevelLocals& doomMap, unsigned int sectorIndex)
// To do: call FreeGeometry and FreeUniforms
}
void DoomLevelMesh::FloorHeightChanged(struct sector_t* sector)
{
// UpdateFlat(level, sector->Index());
}
void DoomLevelMesh::CeilingHeightChanged(struct sector_t* sector)
{
// UpdateFlat(level, sector->Index());
}
void DoomLevelMesh::MidTex3DHeightChanged(struct sector_t* sector)
{
// UpdateFlat(level, sector->Index());
}
void DoomLevelMesh::FloorTextureChanged(struct sector_t* sector)
{
// UpdateFlat(level, sector->Index());
}
void DoomLevelMesh::CeilingTextureChanged(struct sector_t* sector)
{
// UpdateFlat(level, sector->Index());
}
void DoomLevelMesh::SectorChangedOther(struct sector_t* sector)
{
// UpdateFlat(level, sector->Index());
}
void DoomLevelMesh::SideTextureChanged(struct side_t* side, int section)
{
// UpdateSide(level, side->Index());
}
void DoomLevelMesh::UpdateSide(FLevelLocals& doomMap, unsigned int sideIndex)
{
FreeSide(doomMap, sideIndex);
@ -428,7 +463,7 @@ void DoomLevelMesh::UpdateSide(FLevelLocals& doomMap, unsigned int sideIndex)
void DoomLevelMesh::UpdateFlat(FLevelLocals& doomMap, unsigned int sectorIndex)
{
FreeSide(doomMap, sectorIndex);
FreeFlat(doomMap, sectorIndex);
sector_t* sector = &doomMap.sectors[sectorIndex];
for (FSection& section : doomMap.sections.SectionsForSector(sectorIndex))

View file

@ -2,6 +2,7 @@
#pragma once
#include "hw_levelmesh.h"
#include "levelmeshhelper.h"
#include "scene/hw_drawstructs.h"
#include "common/rendering/hwrenderer/data/hw_meshbuilder.h"
#include "tarray.h"
@ -41,7 +42,7 @@ struct FlatSurfaceBlock
int FirstSurface = -1;
};
class DoomLevelMesh : public LevelMesh
class DoomLevelMesh : public LevelMesh, public UpdateLevelMesh
{
public:
DoomLevelMesh(FLevelLocals &doomMap);
@ -66,6 +67,14 @@ public:
void CreateLights(FLevelLocals& doomMap);
void FloorHeightChanged(struct sector_t* sector) override;
void CeilingHeightChanged(struct sector_t* sector) override;
void MidTex3DHeightChanged(struct sector_t* sector) override;
void FloorTextureChanged(struct sector_t* sector) override;
void CeilingTextureChanged(struct sector_t* sector) override;
void SectorChangedOther(struct sector_t* sector) override;
void SideTextureChanged(struct side_t* side, int section) override;
private:
void CreateSurfaces(FLevelLocals& doomMap);