Skip to content

Commit 765ab56

Browse files
committed
- convert the rest of texture stuff to C++ classes
1 parent 3b8e87e commit 765ab56

9 files changed

Lines changed: 366 additions & 323 deletions

File tree

DriverLevelTool/driver_routines/d2_types.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,4 +337,19 @@ struct Spool {
337337

338338
#define REGION_EMPTY (0xFFFF)
339339

340+
struct PALLET_INFO
341+
{
342+
int palette;
343+
int texnum;
344+
int tpage;
345+
int clut_number;
346+
};
347+
348+
struct PALLET_INFO_D1
349+
{
350+
int palette;
351+
int texnum;
352+
int tpage;
353+
};
354+
340355
#endif

DriverLevelTool/driver_routines/level.cpp

Lines changed: 4 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -109,32 +109,6 @@ void LoadModelNamesLump(IVirtualStream* pFile, int size)
109109
pFile->Seek(l_ofs, VS_SEEK_SET);
110110
}
111111

112-
//-------------------------------------------------------------
113-
// load texture names, same as model names
114-
//-------------------------------------------------------------
115-
void LoadTextureNamesLump(IVirtualStream* pFile, int size)
116-
{
117-
int l_ofs = pFile->Tell();
118-
119-
g_textureNamesData = new char[size];
120-
121-
pFile->Read(g_textureNamesData, size, 1);
122-
123-
int len = strlen(g_textureNamesData);
124-
int sz = 0;
125-
126-
do
127-
{
128-
char* str = g_textureNamesData + sz;
129-
130-
len = strlen(str);
131-
132-
sz += len + 1;
133-
} while (sz < size);
134-
135-
pFile->Seek(l_ofs, VS_SEEK_SET);
136-
}
137-
138112
//-------------------------------------------------------------
139113
// parses model lumps and exports models to OBJ
140114
//-------------------------------------------------------------
@@ -180,99 +154,6 @@ void LoadLevelModelsLump(IVirtualStream* pFile)
180154

181155
//---------------------------------------------------------------------------------------------------------------------------------
182156

183-
struct PAL_INFO
184-
{
185-
int palette;
186-
int texnum;
187-
int tpage;
188-
int clut_number;
189-
};
190-
191-
struct PAL_INFO_D1
192-
{
193-
int palette;
194-
int texnum;
195-
int tpage;
196-
};
197-
198-
//-------------------------------------------------------------
199-
// Loads car and pedestrians palletes
200-
//-------------------------------------------------------------
201-
void ProcessPalletLump(IVirtualStream* pFile, int lump_size)
202-
{
203-
ushort* clutTablePtr;
204-
int total_cluts;
205-
int l_ofs = pFile->Tell();
206-
207-
pFile->Read(&total_cluts, 1, sizeof(int));
208-
209-
if (total_cluts == 0)
210-
return;
211-
212-
g_extraPalettes = new ExtClutData_t[total_cluts + 1];
213-
memset(g_extraPalettes, 0, sizeof(ExtClutData_t) * total_cluts);
214-
215-
Msg("total_cluts: %d\n", total_cluts);
216-
217-
int added_cluts = 0;
218-
while (true)
219-
{
220-
PAL_INFO info;
221-
222-
if (g_format == LEV_FORMAT_DRIVER1)
223-
{
224-
PAL_INFO_D1 infod1;
225-
pFile->Read(&infod1, 1, sizeof(info) - sizeof(int));
226-
info.clut_number = -1; // D1 doesn't have that
227-
info.tpage = infod1.tpage;
228-
info.texnum = infod1.texnum;
229-
info.palette = infod1.palette;
230-
}
231-
else
232-
{
233-
pFile->Read(&info, 1, sizeof(info));
234-
}
235-
236-
if (info.palette == -1)
237-
break;
238-
239-
if (info.clut_number == -1)
240-
{
241-
ExtClutData_t& data = g_extraPalettes[added_cluts];
242-
data.texnum[data.texcnt++] = info.texnum;
243-
data.tpage = info.tpage;
244-
data.palette = info.palette;
245-
246-
clutTablePtr = data.clut.colors;
247-
248-
pFile->Read(clutTablePtr, 16, sizeof(ushort));
249-
250-
added_cluts++;
251-
252-
// only in D1 we need to check count
253-
if (g_format == LEV_FORMAT_DRIVER1)
254-
{
255-
if (added_cluts >= total_cluts)
256-
break;
257-
}
258-
}
259-
else
260-
{
261-
//Msg(" reference clut: %d, tex %d\n", info.clut_number, info.texnum);
262-
263-
ExtClutData_t& data = g_extraPalettes[info.clut_number];
264-
265-
// add texture number to existing clut
266-
data.texnum[data.texcnt++] = info.texnum;
267-
}
268-
}
269-
270-
Msg(" added: %d\n", added_cluts);
271-
g_numExtraPalettes = added_cluts;
272-
273-
pFile->Seek(l_ofs, VS_SEEK_SET);
274-
}
275-
276157
//-------------------------------------------------------------
277158
// Loads overhead map lump
278159
//-------------------------------------------------------------
@@ -400,7 +281,7 @@ void ProcessLumps(IVirtualStream* pFile)
400281
break;
401282
case LUMP_TEXTURENAMES:
402283
MsgWarning("LUMP_TEXTURENAMES ofs=%d size=%d\n", pFile->Tell(), lump.size);
403-
LoadTextureNamesLump(pFile, lump.size);
284+
g_levTextures.LoadTextureNamesLump(pFile, lump.size);
404285
break;
405286
case LUMP_MODELNAMES:
406287
MsgWarning("LUMP_MODELNAMES ofs=%d size=%d\n", pFile->Tell(), lump.size);
@@ -421,7 +302,7 @@ void ProcessLumps(IVirtualStream* pFile)
421302
break;
422303
case LUMP_PALLET:
423304
MsgWarning("LUMP_PALLET ofs=%d size=%d\n", pFile->Tell(), lump.size);
424-
ProcessPalletLump(pFile, lump.size);
305+
g_levTextures.ProcessPalletLump(pFile);
425306
break;
426307
case LUMP_SPOOLINFO:
427308
MsgWarning("LUMP_SPOOLINFO ofs=%d size=%d\n", pFile->Tell(), lump.size);
@@ -448,7 +329,7 @@ void ProcessLumps(IVirtualStream* pFile)
448329
break;
449330
case LUMP_TEXTUREINFO:
450331
MsgWarning("LUMP_TEXTUREINFO ofs=%d size=%d\n", pFile->Tell(), lump.size);
451-
LoadTextureInfoLump(pFile);
332+
g_levTextures.LoadTextureInfoLump(pFile);
452333
break;
453334
default:
454335
MsgInfo("LUMP type: %d (0x%X) ofs=%d size=%d\n", lump.type, lump.type, pFile->Tell(), lump.size);
@@ -548,7 +429,7 @@ void LoadLevelFile(const char* filename)
548429
//-----------------------------------------------------
549430
// read global textures
550431

551-
LoadPermanentTPages(g_levStream);
432+
g_levTextures.LoadPermanentTPages(g_levStream);
552433

553434
//-----------------------------------------------------
554435
// seek to section 3 - lump data 2
@@ -596,15 +477,5 @@ void FreeLevelData()
596477
free(g_carModels[i].lowmodel);
597478
}
598479

599-
delete[] g_textureNamesData;
600-
601-
// delete texture data
602-
delete[] g_texPagePos;
603-
delete[] g_texPages;
604-
delete[] g_extraPalettes;
605480
delete[] g_overlayMapData;
606-
607-
g_texPagePos = nullptr;
608-
g_texPagePos = nullptr;
609-
g_extraPalettes = nullptr;
610481
}

DriverLevelTool/driver_routines/level.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ class IVirtualStream;
6767
struct RegionModels_t;
6868

6969
void LoadModelNamesLump(IVirtualStream* pFile, int size);
70-
void LoadTextureNamesLump(IVirtualStream* pFile, int size);
7170

7271
void LoadLevelFile(const char* filename);
7372
void FreeLevelData();

DriverLevelTool/driver_routines/regions.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,10 +88,8 @@ void LoadRegionData(IVirtualStream* pFile, RegionModels_t* models, AreaDataStr*
8888
// fetch textures
8989
for(int i = 0; pages->pageIndexes[i] != REGTEXPAGE_EMPTY; i++)
9090
{
91-
int pageIdx = pages->pageIndexes[i];
92-
93-
// region textures are non-compressed due to loading speeds
94-
g_texPages[pageIdx].LoadTPageAndCluts(pFile, false);
91+
CTexturePage* tpage = g_levTextures.GetTPage(pages->pageIndexes[i]);
92+
tpage->LoadTPageAndCluts(pFile, true);
9593

9694
if(pFile->Tell() % 2048)
9795
pFile->Seek(2048 - (pFile->Tell() % 2048),VS_SEEK_CUR);

0 commit comments

Comments
 (0)