2
* Copyright 2010 Inalogic Inc.
4
* This program is free software: you can redistribute it and/or modify it
5
* under the terms of the GNU Lesser General Public License version 3, as
6
* published by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful, but
9
* WITHOUT ANY WARRANTY; without even the implied warranties of
10
* MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
11
* PURPOSE. See the applicable version of the GNU Lesser General Public
12
* License for more details.
14
* You should have received a copy of both the GNU Lesser General Public
15
* License version 3 along with this program. If not, see
16
* <http://www.gnu.org/licenses/>
18
* Authored by: Jay Taoko <jay.taoko_AT_gmail_DOT_com>
23
#include "NuxCore/NuxCore.h"
25
#include "NuxCore/FilePath.h"
26
#include "NuxImage/Tga.h"
27
#include "NuxImage/ImageSurface.h"
28
#include "NuxImage/NITX.h"
29
#include "NTextureArchiveManager.h"
31
#include "NuxCore/TinyXML/tinyxml.h"
36
bool IsUITextureArchive (const TCHAR *ArchiveFileName)
38
NSerializer *fileStream = GFileManager.CreateFileReader (ArchiveFileName, NSerializer::Read | NSerializer::Write);
40
fileStream->Seek (0, NSerializer::SeekStart);
43
fileStream->Serialize ( (char *) &FileTag, sizeof (FileTag) );
46
if (FileTag != UITEXTUREARCHIVETAG)
54
NUITextureArchiver::NUITextureArchiver (const TCHAR *ArchiveFileName)
56
if (IsUITextureArchive (ArchiveFileName) )
57
LoadUIArchive (ArchiveFileName, m_ArchiveTextureArray);
60
NUITextureArchiver::~NUITextureArchiver()
62
int num = m_ArchiveTextureArray.size();
64
for (int n = 0; n < num; n++)
66
delete m_ArchiveTextureArray[n]->BaseTexture;
67
delete m_ArchiveTextureArray[n];
70
m_ArchiveTextureArray.clear();
73
NBitmapData *NUITextureArchiver::ExtractTextureStyle (const TCHAR *Style)
75
int num = m_ArchiveTextureArray.size();
77
for (int n = 0; n < num; n++)
79
if (Stricmp (m_ArchiveTextureArray[n]->Style.GetTCharPtr(), Style) == 0)
81
return m_ArchiveTextureArray[n]->BaseTexture;
88
NBitmapData *NUITextureArchiver::GetTexture (t_u32 index)
90
nuxAssert (index >= 0);
91
nuxAssert (index < m_ArchiveTextureArray.size() );
93
if ( (index < 0) || (index > m_ArchiveTextureArray.size() ) )
96
return m_ArchiveTextureArray[index]->BaseTexture;
99
int NUITextureArchiver::GetNumTexture()
101
return m_ArchiveTextureArray.size();
107
// <Image Name="Stroke_10pxrad_2px.tga" type="Stroke" style="eSTROKE_CORNER_ROUND10" border_left="10" border_right="10" border_top="10" border_bottom="10" border_only="true" />
108
// <Image Name="Stroke_4pxrad_2px.tga" type="Stroke" style="eSTROKE_CORNER_ROUND4" border_left="4" border_right="4" border_top="4" border_bottom="4" border_only="true" />
111
bool LoadXMLUITextures (const char *XMLUIFile, std::vector<ArchiveTextureData *>& ArchTexArray)
114
m_FilePath.AddSearchPath (TEXT ("") ); // for case where fully qualified path is given
115
m_FilePath.AddSearchPath (TEXT (".") );
118
m_FilePath.AddSearchPath (TEXT (PKGDATADIR"/UITextures") );
120
m_FilePath.AddSearchPath (TEXT ("./Data/UITextures") );
121
m_FilePath.AddSearchPath (TEXT ("../Data/UITextures") );
122
m_FilePath.AddSearchPath (TEXT ("../../Data/UITextures") );
124
std::string file_search = XMLUIFile;
125
NString painter_filename = m_FilePath.GetFile (file_search.c_str() );
127
if (painter_filename == "")
129
printf (TEXT ("Unable to locate %s ...\n"), file_search.c_str() );
133
TiXmlDocument doc (painter_filename.GetTCharPtr() );
135
TiXmlHandle docHandle ( &doc );
136
TiXmlElement *data = docHandle.FirstChild ("PaintData").Element();
137
TiXmlElement *image = 0;
139
for (image = data->FirstChildElement ("Image"); image; image = image->NextSiblingElement ("Image") )
141
ArchiveTextureData *pimage = new ArchiveTextureData;
142
Memset (pimage, 0, sizeof (ArchiveTextureData) );
144
const char *StyleName = image->Attribute ("style");
146
pimage->Style = StyleName;
148
// If the attributes border_left, border_right, border_top, border_bottom are not present, assume they are equal to 0;
149
pimage->border_left = pimage->border_right = pimage->border_top = pimage->border_bottom = 0;
151
image->Attribute ("border_left", &pimage->border_left);
152
image->Attribute ("border_right", &pimage->border_right);
153
image->Attribute ("border_top", &pimage->border_top);
154
image->Attribute ("border_bottom", &pimage->border_bottom);
157
const char *draw_borders_only = image->Attribute ("border_only");
159
if (draw_borders_only == 0)
161
pimage->draw_borders_only = true;
165
if (strcmp ("false", draw_borders_only) == 0)
167
pimage->draw_borders_only = false;
171
pimage->draw_borders_only = true;
175
const char *filename = image->Attribute ("Name");
177
NString filepath = m_FilePath.GetFile (filename);
179
pimage->SourceFile = filename;
181
if (filepath == TEXT ("") )
183
pimage->BaseTexture = 0;
187
pimage->BaseTexture = LoadImageFile (filepath.GetTCharPtr() );
190
pimage->ArchiveOffset = 0;
191
ArchTexArray.push_back (pimage);
197
// Archive only 2D texture. Do not archive Volumes or Cubemaps
198
bool CreateUITextureArchive (const TCHAR *XMLUIFile, const TCHAR *ArchiveName)
200
std::vector<ArchiveTextureData *> ArchTexArray;
202
if (!LoadXMLUITextures (XMLUIFile, ArchTexArray) )
205
NSerializer *fileStream = GFileManager.CreateFileWriter (ArchiveName, NSerializer::Read | NSerializer::Write | NSerializer::OverWriteReadOnly);
207
fileStream->Seek (0, NSerializer::SeekStart);
210
int numtexture = ArchTexArray.size();
212
unsigned int FileTag = UITEXTUREARCHIVETAG; // inalogic user interface texture archive
213
unsigned int FileVersion = UITEXTUREARCHIVEVERSION; // inalogic user interface texture archive
216
fileStream->Serialize ( (char *) &FileTag, sizeof (FileTag) );
217
OFFSET += sizeof (FileTag);
218
fileStream->Serialize ( (char *) &FileVersion, sizeof (FileVersion) );
219
OFFSET += sizeof (FileVersion);
221
// write num textures
222
fileStream->Serialize ( (char *) &numtexture, sizeof (numtexture) );
223
OFFSET += sizeof (numtexture);
225
for (int i = 0; i < numtexture; i++)
227
fileStream->Serialize ( (char *) TCHAR_TO_ANSI (ArchTexArray[i]->Style.GetTCharPtr() ), (t_u32) ArchTexArray[i]->Style.Length() + 1);
228
OFFSET += ArchTexArray[i]->Style.Length() + 1;
229
fileStream->Serialize ( (char *) TCHAR_TO_ANSI (ArchTexArray[i]->SourceFile.GetTCharPtr() ), (t_u32) ArchTexArray[i]->SourceFile.Length() + 1);
230
OFFSET += ArchTexArray[i]->SourceFile.Length() + 1;
232
fileStream->Serialize ( (char *) & (ArchTexArray[i]->border_left), sizeof (ArchTexArray[i]->border_left) );
233
OFFSET += sizeof (ArchTexArray[i]->border_left);
234
fileStream->Serialize ( (char *) & (ArchTexArray[i]->border_right), sizeof (ArchTexArray[i]->border_right) );
235
OFFSET += sizeof (ArchTexArray[i]->border_right);
236
fileStream->Serialize ( (char *) & (ArchTexArray[i]->border_top), sizeof (ArchTexArray[i]->border_top) );
237
OFFSET += sizeof (ArchTexArray[i]->border_top);
238
fileStream->Serialize ( (char *) & (ArchTexArray[i]->border_bottom), sizeof (ArchTexArray[i]->border_bottom) );
239
OFFSET += sizeof (ArchTexArray[i]->border_bottom);
241
fileStream->Serialize ( (char *) & (ArchTexArray[i]->ArchiveOffset), sizeof (ArchTexArray[i]->ArchiveOffset) );
242
OFFSET += sizeof (ArchTexArray[i]->ArchiveOffset);
245
unsigned int NumArchived = 0;
247
for (int i = 0; i < numtexture; i++)
250
NFileName Filename (TEXT (PKGDATADIR"/UITextures") );
252
NFileName Filename (TEXT ("../../Data/UITextures/") );
254
Filename += ArchTexArray[i]->SourceFile.GetTCharPtr();
255
NBitmapData *BaseTexture = LoadImageFile (Filename.GetTCharPtr() );
259
TextureArchiveAdd_ver_0_0_1 (fileStream, BaseTexture, ArchTexArray[i]->SourceFile.GetTCharPtr(), OFFSET);
261
ArchTexArray[i]->ArchiveOffset = OFFSET;
265
ArchTexArray[i]->ArchiveOffset = 0xFFFFFFFF;
269
// Second pass with the header where we write the offset to the texture data
270
fileStream->Seek (sizeof (FileTag) + sizeof (FileVersion), NSerializer::SeekStart);
271
// Write the true number of textures that has been archived.
272
fileStream->Serialize ( (char *) &NumArchived, sizeof (NumArchived) );
274
for (int i = 0; i < numtexture; i++)
276
fileStream->Serialize ( (char *) TCHAR_TO_ANSI (ArchTexArray[i]->Style.GetTCharPtr() ), (t_u32) ArchTexArray[i]->Style.Length() + 1);
277
fileStream->Serialize ( (char *) TCHAR_TO_ANSI (ArchTexArray[i]->SourceFile.GetTCharPtr() ), (t_u32) ArchTexArray[i]->SourceFile.Length() + 1);
279
fileStream->Serialize ( (char *) & (ArchTexArray[i]->border_left), sizeof (ArchTexArray[i]->border_left) );
280
fileStream->Serialize ( (char *) & (ArchTexArray[i]->border_right), sizeof (ArchTexArray[i]->border_right) );
281
fileStream->Serialize ( (char *) & (ArchTexArray[i]->border_top), sizeof (ArchTexArray[i]->border_top) );
282
fileStream->Serialize ( (char *) & (ArchTexArray[i]->border_bottom), sizeof (ArchTexArray[i]->border_bottom) );
284
int ddd = ArchTexArray[i]->ArchiveOffset;
285
fileStream->Serialize ( (char *) & (ArchTexArray[i]->ArchiveOffset), sizeof (ArchTexArray[i]->ArchiveOffset) );
286
ddd = fileStream->Tell();
293
bool LoadUIArchive (const TCHAR *ArchiveName, std::vector<ArchiveTextureData *>& ArchTexArray)
295
NSerializer *fileStream = GFileManager.CreateFileReader (TCHAR_TO_ANSI (ArchiveName), NSerializer::Read | NSerializer::Write);
297
fileStream->Seek (0, NSerializer::SeekStart);
302
unsigned int FileTag;
303
unsigned int FileVersion;
304
fileStream->Serialize ( (char *) &FileTag, sizeof (FileTag) );
305
fileStream->Serialize ( (char *) &FileVersion, sizeof (FileVersion) );
307
if (FileTag != UITEXTUREARCHIVETAG)
309
nuxAssertMsg (0, TEXT ("[ReadArchive] File: %s is not a texture archive."), ArchiveName);
313
fileStream->Serialize ( (char *) &numtexture, sizeof (numtexture) );
314
OFFSET = fileStream->Tell();
316
char CharBuffer[2048];
318
for (int i = 0; i < numtexture; i++)
324
fileStream->Serialize (&CharBuffer[c], 1);
327
while (CharBuffer[c-1] != 0);
329
CharBuffer[c] = 0; // add null terminating char
330
NString Style = CharBuffer;
336
fileStream->Serialize (&CharBuffer[c], 1);
339
while (CharBuffer[c-1] != 0);
341
CharBuffer[c] = 0; // add null terminating char
342
NString SourceFile = CharBuffer;
344
unsigned int border_left;
345
unsigned int border_right;
346
unsigned int border_top;
347
unsigned int border_bottom;
349
fileStream->Serialize ( (char *) &border_left, sizeof (border_left) );
350
fileStream->Serialize ( (char *) &border_right, sizeof (border_right) );
351
fileStream->Serialize ( (char *) &border_top, sizeof (border_top) );
352
fileStream->Serialize ( (char *) &border_bottom, sizeof (border_bottom) );
355
unsigned int DataOffset;
356
fileStream->Serialize ( (char *) &DataOffset, sizeof (DataOffset) );
358
int CurrentPos = fileStream->Tell();
360
//nuxDebugMsg(TEXT("%s - %s"), Style.GetTCharPtr(), SourceFile.GetTCharPtr());
361
if (DataOffset == 0xFFFFFFFF)
363
nuxDebugMsg (TEXT ("[LoadUIArchive] Can't find file %s in UI archive %s. Skipping..."), SourceFile.GetTCharPtr(), ArchiveName);
366
NBitmapData *BaseTexture = TextureArchiveLoad_ver_0_0_1 (fileStream, DataOffset);
368
ArchiveTextureData *pimage = new ArchiveTextureData;
369
pimage->SourceFile = SourceFile;
370
pimage->Style = Style;
371
pimage->BaseTexture = BaseTexture;
372
pimage->border_left = border_left;
373
pimage->border_right = border_right;
374
pimage->border_top = border_top;
375
pimage->border_bottom = border_bottom;
377
ArchTexArray.push_back (pimage);
379
// Go back in the header section
380
fileStream->Seek (CurrentPos, NSerializer::SeekStart);
387
//NTextureArchiveManager ////////////////////////////////////////////
389
NTextureArchiveManager::NTextureArchiveManager()
392
, m_NumberOfTextures (0)
397
NTextureArchiveManager::~NTextureArchiveManager()
401
m_FileStream->Close();
406
bool NTextureArchiveManager::CreateTextureArchiveFile (const TCHAR *TextureArchiveFilename)
408
#define CHECK_ITX_WRITE_ERROR /*if(m_FileStream.bad()) {m_FileStream->close(); nuxAssertMsg(0, TEXT("[CreateTextureArchiveFile] Write Error.")); return false;}*/
410
m_FileStream = GFileManager.CreateFileWriter (TCHAR_TO_ANSI (TextureArchiveFilename), NSerializer::Read | NSerializer::Write);
414
nuxAssertMsg (0, TEXT ("[CreateTextureArchiveFile] Can't open file: %s"), TextureArchiveFilename);
419
m_FileStream->Seek (0, NSerializer::SeekStart);
420
unsigned int ArchiveTag = TEXTUREARCHIVETAG;
421
unsigned int ArchiveFormatVersion = TEXTUREARCHIVEVERSION;
422
m_NumberOfTextures = 0;
423
NTimeStamp TimeStamp;
426
m_FileStream->Serialize ( (char *) &ArchiveTag, sizeof (ArchiveTag) );
427
CHECK_ITX_WRITE_ERROR;
428
m_FileStream->Serialize ( (char *) &ArchiveFormatVersion, sizeof (ArchiveFormatVersion) );
429
CHECK_ITX_WRITE_ERROR;
432
m_FileStream->Serialize ( (char *) &TimeStamp.m_Year, sizeof (TimeStamp.m_Year) );
433
CHECK_ITX_WRITE_ERROR;
434
m_FileStream->Serialize ( (char *) &TimeStamp.m_Month, sizeof (TimeStamp.m_Month) );
435
CHECK_ITX_WRITE_ERROR;
436
m_FileStream->Serialize ( (char *) &TimeStamp.m_Day, sizeof (TimeStamp.m_Day) );
437
CHECK_ITX_WRITE_ERROR;
438
m_FileStream->Serialize ( (char *) &TimeStamp.m_Hour, sizeof (TimeStamp.m_Hour) );
439
CHECK_ITX_WRITE_ERROR;
440
m_FileStream->Serialize ( (char *) &TimeStamp.m_Minute, sizeof (TimeStamp.m_Minute) );
441
CHECK_ITX_WRITE_ERROR;
442
m_FileStream->Serialize ( (char *) &TimeStamp.m_Second, sizeof (TimeStamp.m_Second) );
443
CHECK_ITX_WRITE_ERROR;
444
m_FileStream->Serialize ( (char *) &TimeStamp.m_MicroSecond, sizeof (TimeStamp.m_MicroSecond) );
445
CHECK_ITX_WRITE_ERROR;
448
m_FileStream->Serialize ( (char *) &TimeStamp.m_Year, sizeof (TimeStamp.m_Year) );
449
CHECK_ITX_WRITE_ERROR;
450
m_FileStream->Serialize ( (char *) &TimeStamp.m_Month, sizeof (TimeStamp.m_Month) );
451
CHECK_ITX_WRITE_ERROR;
452
m_FileStream->Serialize ( (char *) &TimeStamp.m_Day, sizeof (TimeStamp.m_Day) );
453
CHECK_ITX_WRITE_ERROR;
454
m_FileStream->Serialize ( (char *) &TimeStamp.m_Hour, sizeof (TimeStamp.m_Hour) );
455
CHECK_ITX_WRITE_ERROR;
456
m_FileStream->Serialize ( (char *) &TimeStamp.m_Minute, sizeof (TimeStamp.m_Minute) );
457
CHECK_ITX_WRITE_ERROR;
458
m_FileStream->Serialize ( (char *) &TimeStamp.m_Second, sizeof (TimeStamp.m_Second) );
459
CHECK_ITX_WRITE_ERROR;
460
m_FileStream->Serialize ( (char *) &TimeStamp.m_MicroSecond, sizeof (TimeStamp.m_MicroSecond) );
461
CHECK_ITX_WRITE_ERROR;
463
// Number of Textures in the archives
464
m_FileStream->Serialize ( (char *) &m_NumberOfTextures, sizeof (m_NumberOfTextures) );
465
CHECK_ITX_WRITE_ERROR;
468
m_CurrentTextureArchive = TextureArchiveFilename;
470
#undef CHECK_ITX_WRITE_ERROR
474
bool NTextureArchiveManager::AddTextureToArchive (const TCHAR *SourceFolder, const TCHAR *TextureFilename)
478
nuxAssertMsg (0, TEXT ("[NTextureArchiveManager::AddTextureToArchive] Cannot add texture to archive. Load texture archive first.") );
484
if ( (SourceFolder != 0) && (NString (SourceFolder) != NString (TEXT ("") ) ) )
486
Filename = SourceFolder;
487
Filename.RemoveBackSlashAtEnd();
488
Filename.RemoveSlashAtEnd();
489
Filename.AddSlashAtEnd();
492
Filename += TextureFilename;
493
NBitmapData *BaseTexture = LoadImageFile (Filename.GetTCharPtr() );
495
if (BaseTexture == 0)
499
TextureArchiveAdd_ver_0_0_1 (m_FileStream, BaseTexture, TextureFilename, Offset);
500
m_NumberOfTextures++;
502
// Update the "last modified" date and the number of textures in the archive.
503
m_FileStream->Seek (TEXTUREACHIVEHEADER_SIZE, NSerializer::SeekStart);
505
NTimeStamp TimeStamp;
509
m_FileStream->Serialize ( (char *) &TimeStamp.m_Year, sizeof (TimeStamp.m_Year) );
510
m_FileStream->Serialize ( (char *) &TimeStamp.m_Month, sizeof (TimeStamp.m_Month) );
511
m_FileStream->Serialize ( (char *) &TimeStamp.m_Day, sizeof (TimeStamp.m_Day) );
512
m_FileStream->Serialize ( (char *) &TimeStamp.m_Hour, sizeof (TimeStamp.m_Hour) );
513
m_FileStream->Serialize ( (char *) &TimeStamp.m_Minute, sizeof (TimeStamp.m_Minute) );
514
m_FileStream->Serialize ( (char *) &TimeStamp.m_Second, sizeof (TimeStamp.m_Second) );
515
m_FileStream->Serialize ( (char *) &TimeStamp.m_MicroSecond, sizeof (TimeStamp.m_MicroSecond) );
517
// Number of Textures in the archives
518
m_FileStream->Serialize ( (char *) &m_NumberOfTextures, sizeof (m_NumberOfTextures) );
523
bool NTextureArchiveManager::LoadTextureArchiveFile (const TCHAR *Filename)
528
bool NTextureArchiveManager::CloseTextureArchiveFile()
531
m_FileStream->Close();
533
NUX_SAFE_DELETE (m_FileStream);
534
m_CurrentTextureArchive = TEXT ("");
539
bool NTextureArchiveManager::PointToFirstTexture()
541
nuxAssert (m_FileStream);
543
if (m_FileStream == 0)
546
m_FileStream->Seek (0, NSerializer::SeekStart);
547
unsigned int ArchiveTag = 0;
548
unsigned int ArchiveFormatVersion = 0;
549
//unsigned int NumTextures = 0;
550
NTimeStamp TimeStamp;
553
m_FileStream->Serialize ( (char *) &ArchiveTag, sizeof (ArchiveTag) ); // should be 0x20787469
554
m_FileStream->Serialize ( (char *) &ArchiveFormatVersion, sizeof (ArchiveFormatVersion) );
555
nuxDebugMsg (TEXT ("File Tag: %c%c%c%c"),
557
(ArchiveTag & 0xFF00) >> 8,
558
(ArchiveTag & 0xFF0000) >> 16,
559
(ArchiveTag & 0xFF000000) >> 24);
560
nuxDebugMsg (TEXT ("File Version: %c.%c.%c.%c"),
561
(ArchiveFormatVersion & 0xFF),
562
(ArchiveFormatVersion & 0xFF00) >> 8,
563
(ArchiveFormatVersion & 0xFF0000) >> 16,
564
(ArchiveFormatVersion & 0xFF000000) >> 24);
567
m_FileStream->Serialize ( (char *) &TimeStamp.m_Year, sizeof (TimeStamp.m_Year) );
568
m_FileStream->Serialize ( (char *) &TimeStamp.m_Month, sizeof (TimeStamp.m_Month) );
569
m_FileStream->Serialize ( (char *) &TimeStamp.m_Day, sizeof (TimeStamp.m_Day) );
570
m_FileStream->Serialize ( (char *) &TimeStamp.m_Hour, sizeof (TimeStamp.m_Hour) );
571
m_FileStream->Serialize ( (char *) &TimeStamp.m_Minute, sizeof (TimeStamp.m_Minute) );
572
m_FileStream->Serialize ( (char *) &TimeStamp.m_Second, sizeof (TimeStamp.m_Second) );
573
m_FileStream->Serialize ( (char *) &TimeStamp.m_MicroSecond, sizeof (TimeStamp.m_MicroSecond) );
574
nuxDebugMsg (TEXT ("File created on: %d/%d/%d at %d:%d:%d"), TimeStamp.m_Year, TimeStamp.m_Month, TimeStamp.m_Day, TimeStamp.m_Hour, TimeStamp.m_Minute, TimeStamp.m_Second);
577
m_FileStream->Serialize ( (char *) &TimeStamp.m_Year, sizeof (TimeStamp.m_Year) );
578
m_FileStream->Serialize ( (char *) &TimeStamp.m_Month, sizeof (TimeStamp.m_Month) );
579
m_FileStream->Serialize ( (char *) &TimeStamp.m_Day, sizeof (TimeStamp.m_Day) );
580
m_FileStream->Serialize ( (char *) &TimeStamp.m_Hour, sizeof (TimeStamp.m_Hour) );
581
m_FileStream->Serialize ( (char *) &TimeStamp.m_Minute, sizeof (TimeStamp.m_Minute) );
582
m_FileStream->Serialize ( (char *) &TimeStamp.m_Second, sizeof (TimeStamp.m_Second) );
583
m_FileStream->Serialize ( (char *) &TimeStamp.m_MicroSecond, sizeof (TimeStamp.m_MicroSecond) );
584
nuxDebugMsg (TEXT ("Last modified on: %d/%d/%d at %d:%d:%d"), TimeStamp.m_Year, TimeStamp.m_Month, TimeStamp.m_Day, TimeStamp.m_Hour, TimeStamp.m_Minute, TimeStamp.m_Second);
586
// Number of Textures in the archives
587
m_FileStream->Serialize ( (char *) &m_NumberOfTextures, sizeof (m_NumberOfTextures) );
592
void NTextureArchiveManager::PrintArchiveContent (const TCHAR *TextureArchiveFilename)
595
m_FileStream->Close();
597
m_FileStream = GFileManager.CreateFileReader (TextureArchiveFilename, NSerializer::NoOverWrite | NSerializer::Read | NSerializer::Write);
600
PointToFirstTexture();
602
for (unsigned int i = 0; i < m_NumberOfTextures; i++)
604
TextureArchiveInfo_ver_0_0_1 TextureArchiveInfo;
605
TextureArchiveGetInfo_ver_0_0_1 (m_FileStream, TextureArchiveInfo);
606
nuxDebugMsg (TEXT ("File: %s"), ANSI_TO_TCHAR (TextureArchiveInfo.Name.GetTCharPtr() ) );
607
nuxDebugMsg (TEXT ("---------------------------------------------") );
608
nuxDebugMsg (TEXT (" Type: %s"), (TextureArchiveInfo.Type == ARCH_TEXTURE2D) ? TEXT ("Texture2D") :
609
(TextureArchiveInfo.Type == ARCH_CUBEMAP) ? TEXT ("Cubemap Texture") :
610
(TextureArchiveInfo.Type == ARCH_VOLUME) ? TEXT ("Volume Texture") :
611
TEXT ("Unknown Texture") );
612
nuxDebugMsg (TEXT (" Format: %s"), GPixelFormats[TextureArchiveInfo.Format].Name);
613
nuxDebugMsg (TEXT (" Width: %d"), TextureArchiveInfo.Width);
614
nuxDebugMsg (TEXT (" Height: %d"), TextureArchiveInfo.Height);
615
nuxDebugMsg (TEXT (" Depth: %d"), TextureArchiveInfo.Depth);
616
nuxDebugMsg (TEXT (" NumMipmap: %d"), TextureArchiveInfo.NumMipmap);
617
nuxDebugMsg (TEXT (" Size: %d"), TextureArchiveInfo.Size);
620
CloseTextureArchiveFile();
624
void NTextureArchiveManager::TraverseTextures (const TCHAR *TextureArchiveFilename)
627
m_FileStream->Close();
629
m_FileStream = GFileManager.CreateFileReader (TextureArchiveFilename, NSerializer::NoOverWrite | NSerializer::Read | NSerializer::Write);
631
PointToFirstTexture();
633
for (unsigned int i = 0; i < m_NumberOfTextures; i++)
635
unsigned int Offset = m_FileStream->Tell();
636
TextureArchiveLoad_ver_0_0_1 (m_FileStream, Offset);
639
CloseTextureArchiveFile();
642
NBitmapData *NTextureArchiveManager::LoadBitmapArchive (const TCHAR *TextureArchiveFilename, const TCHAR *Filename)
645
m_FileStream->Close();
647
m_FileStream = GFileManager.CreateFileReader (TextureArchiveFilename, NSerializer::NoOverWrite | NSerializer::Read | NSerializer::Write);
649
PointToFirstTexture();
651
for (unsigned int i = 0; i < m_NumberOfTextures; i++)
653
TextureArchiveInfo_ver_0_0_1 TextureArchiveInfo;
654
TextureArchiveGetInfo_ver_0_0_1 (m_FileStream, TextureArchiveInfo);
656
if (Stricmp (Filename, TextureArchiveInfo.Name.GetTCharPtr() ) == 0)
658
return TextureArchiveLoad_ver_0_0_1 (m_FileStream, TextureArchiveInfo.FilePointer);
662
CloseTextureArchiveFile();