Skip to content

Commit afd78e8

Browse files
committed
- don't forget to free GL textures
1 parent c59cdaa commit afd78e8

1 file changed

Lines changed: 16 additions & 5 deletions

File tree

DriverLevelTool/viewer/viewer.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ bool g_holdShift = false;
4848
//-----------------------------------------------------------------
4949

5050
TextureID g_hwTexturePages[128][32];
51+
extern TextureID g_whiteTexture;
5152

5253
// Creates hardware texture
5354
void InitHWTexturePage(CTexturePage* tpage)
@@ -120,7 +121,17 @@ void InitHWTexturePage(CTexturePage* tpage)
120121
free(color_data);
121122
}
122123

123-
extern TextureID g_whiteTexture;
124+
void FreeHWTexturePage(CTexturePage* tpage)
125+
{
126+
int tpageId = tpage->GetId();
127+
GR_DestroyTexture(g_hwTexturePages[tpageId][0]);
128+
129+
for (int pal = 0; pal < 16; pal++)
130+
{
131+
if(g_hwTexturePages[tpageId][pal + 1] != g_whiteTexture)
132+
GR_DestroyTexture(g_hwTexturePages[tpageId][pal + 1]);
133+
}
134+
}
124135

125136
// returns hardware texture
126137
TextureID GetHWTexture(int tpage, int pal)
@@ -135,6 +146,9 @@ TextureID GetHWTexture(int tpage, int pal)
135146
// Dummy texture initilization
136147
void InitHWTextures()
137148
{
149+
// set loading callbacks
150+
g_levTextures.SetLoadingCallbacks(InitHWTexturePage, FreeHWTexturePage);
151+
138152
for (int i = 0; i < 128; i++)
139153
{
140154
for (int j = 0; j < 32; j++)
@@ -168,13 +182,10 @@ bool LoadLevelFile()
168182
}
169183

170184
CFileStream stream(g_levFile);
185+
ELevelFormat levFormat = CDriverLevelLoader::DetectLevelFormat(&stream);
171186

172-
// set loading callbacks
173-
g_levTextures.SetLoadingCallbacks(InitHWTexturePage, nullptr);
174187
g_levModels.SetModelLoadingCallbacks(CRenderModel::OnModelLoaded, CRenderModel::OnModelFreed);
175188

176-
ELevelFormat levFormat = CDriverLevelLoader::DetectLevelFormat(&stream);
177-
178189
// create map accordingly
179190
if (levFormat >= LEV_FORMAT_DRIVER2_ALPHA16 || levFormat == LEV_FORMAT_AUTODETECT)
180191
g_levMap = new CDriver2LevelMap();

0 commit comments

Comments
 (0)