@@ -48,6 +48,7 @@ bool g_holdShift = false;
4848// -----------------------------------------------------------------
4949
5050TextureID g_hwTexturePages[128 ][32 ];
51+ extern TextureID g_whiteTexture;
5152
5253// Creates hardware texture
5354void 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
126137TextureID GetHWTexture (int tpage, int pal)
@@ -135,6 +146,9 @@ TextureID GetHWTexture(int tpage, int pal)
135146// Dummy texture initilization
136147void 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