117#include <D3dx8core.h>
275 Close_Texture_File_Cache();
281 unsigned miljoonat=
value/(1024*1028);
282 unsigned tuhannet=(
value/1024)%1024;
283 unsigned ykkoset=
value%1024;
285 number.
Format(
"%d %3.3d %3.3d",miljoonat,tuhannet,ykkoset);
288 number.
Format(
"%d %3.3d",tuhannet,ykkoset);
291 number.
Format(
"%d",ykkoset);
301 ini.
Load(
"metals.ini");
306 for (i=0; i<count; i++)
313static void Log_Textures(
bool inited,
unsigned& total_count,
unsigned& total_mem)
316 for (ite.First();!ite.Is_Done();ite.Next()) {
320 D3DSURFACE_DESC desc;
322 if (!d3d_texture)
continue;
326 switch (desc.Format) {
327 case D3DFMT_A8R8G8B8: tex_format=
"D3DFMT_A8R8G8B8";
break;
328 case D3DFMT_R8G8B8: tex_format=
"D3DFMT_R8G8B8";
break;
329 case D3DFMT_A4R4G4B4: tex_format=
"D3DFMT_A4R4G4B4";
break;
330 case D3DFMT_A1R5G5B5: tex_format=
"D3DFMT_A1R5G5B5";
break;
331 case D3DFMT_R5G6B5: tex_format=
"D3DFMT_R5G6B5";
break;
332 case D3DFMT_L8: tex_format=
"D3DFMT_L8";
break;
333 case D3DFMT_A8: tex_format=
"D3DFMT_A8";
break;
334 case D3DFMT_P8: tex_format=
"D3DFMT_P8";
break;
335 case D3DFMT_X8R8G8B8: tex_format=
"D3DFMT_X8R8G8B8";
break;
336 case D3DFMT_X1R5G5B5: tex_format=
"D3DFMT_X1R5G5B5";
break;
337 case D3DFMT_R3G3B2: tex_format=
"D3DFMT_R3G3B2";
break;
338 case D3DFMT_A8R3G3B2: tex_format=
"D3DFMT_A8R3G3B2";
break;
339 case D3DFMT_X4R4G4B4: tex_format=
"D3DFMT_X4R4G4B4";
break;
340 case D3DFMT_A8P8: tex_format=
"D3DFMT_A8P8";
break;
341 case D3DFMT_A8L8: tex_format=
"D3DFMT_A8L8";
break;
342 case D3DFMT_A4L4: tex_format=
"D3DFMT_A4L4";
break;
343 case D3DFMT_V8U8: tex_format=
"D3DFMT_V8U8";
break;
344 case D3DFMT_L6V5U5: tex_format=
"D3DFMT_L6V5U5";
break;
345 case D3DFMT_X8L8V8U8: tex_format=
"D3DFMT_X8L8V8U8";
break;
346 case D3DFMT_Q8W8V8U8: tex_format=
"D3DFMT_Q8W8V8U8";
break;
347 case D3DFMT_V16U16: tex_format=
"D3DFMT_V16U16";
break;
348 case D3DFMT_W11V11U10: tex_format=
"D3DFMT_W11V11U10";
break;
349 case D3DFMT_UYVY: tex_format=
"D3DFMT_UYVY";
break;
350 case D3DFMT_YUY2: tex_format=
"D3DFMT_YUY2";
break;
351 case D3DFMT_DXT1: tex_format=
"D3DFMT_DXT1";
break;
352 case D3DFMT_DXT2: tex_format=
"D3DFMT_DXT2";
break;
353 case D3DFMT_DXT3: tex_format=
"D3DFMT_DXT3";
break;
354 case D3DFMT_DXT4: tex_format=
"D3DFMT_DXT4";
break;
355 case D3DFMT_DXT5: tex_format=
"D3DFMT_DXT5";
break;
356 case D3DFMT_D16_LOCKABLE: tex_format=
"D3DFMT_D16_LOCKABLE";
break;
357 case D3DFMT_D32: tex_format=
"D3DFMT_D32";
break;
358 case D3DFMT_D15S1: tex_format=
"D3DFMT_D15S1";
break;
359 case D3DFMT_D24S8: tex_format=
"D3DFMT_D24S8";
break;
360 case D3DFMT_D16: tex_format=
"D3DFMT_D16";
break;
361 case D3DFMT_D24X8: tex_format=
"D3DFMT_D24X8";
break;
362 case D3DFMT_D24X4S4: tex_format=
"D3DFMT_D24X4S4";
break;
370 Create_Number_String(number,texmem);
372 WWDEBUG_SAY((
"%32s %4d * %4d (%15s), init %d, size: %14s bytes, refs: %d\n",
386 unsigned total_initialized_tex_mem=0;
387 unsigned total_uninitialized_tex_mem=0;
388 unsigned total_initialized_count=0;
389 unsigned total_uninitialized_count=0;
392 WWDEBUG_SAY((
"\nInitialized textures ------------------------------------------\n\n"));
393 Log_Textures(
true,total_initialized_count,total_initialized_tex_mem);
395 Create_Number_String(number,total_initialized_tex_mem);
396 WWDEBUG_SAY((
"\n%d initialized textures, totalling %14s bytes\n\n",
397 total_initialized_count,
400 WWDEBUG_SAY((
"\nUn-initialized textures ---------------------------------------\n\n"));
401 Log_Textures(
false,total_uninitialized_count,total_uninitialized_tex_mem);
403 Create_Number_String(number,total_uninitialized_tex_mem);
404 WWDEBUG_SAY((
"\n%d un-initialized textures, totalling, totalling %14s bytes\n\n",
405 total_uninitialized_count,
459 WWPROFILE(
"WW3DAssetManager::Free_Assets" );
463 while (count-- > 0) {
538 const int DEFAULT_EXCLUDE_ARRAY_SIZE = 8000;
551 exclude_array.
Add(proto);
567 for (i=0; i<exclude_array.
Count(); i++) {
572 HAnimManager.Free_All_Anims_With_Exclusion_List(exclusion_list);
573 HTreeManager.Free_All_Trees_With_Exclusion_List(exclusion_list);
606 const char * name = proto->
Get_Name();
608 if ((strchr(name,
'#') ==
NULL) && (strchr(name,
'.') ==
NULL)) {
663 WWPROFILE(
"WW3DAssetManager::Load_3D_Assets" );
664 if (!w3dfile.
Open()) {
714 WWPROFILE(
"WW3DAssetManager::Load_Prototype" );
728 if (loader !=
NULL) {
741 WWDEBUG_SAY((
"Unknown chunk type encountered! Chunk Id = %d\r\n",chunk_id));
749 if (newproto !=
NULL) {
776 WWDEBUG_SAY((
"Could not generate prototype! Chunk = %d\r\n",chunk_id));
801 WWPROFILE(
"WW3DAssetManager::Create_Render_Obj" );
810 char filename [MAX_PATH];
811 char *mesh_name = ::strchr (name,
'.');
812 if (mesh_name !=
NULL) {
813 ::lstrcpyn (filename, name, ((
int)mesh_name) - ((
int)name) + 1);
814 ::lstrcat (filename,
".w3d");
816 sprintf( filename,
"%s.w3d", name);
822 new_filename+=filename;
830 static int warning_count = 0;
832 if (name[0] !=
'#') {
833 if (++warning_count <= 20) {
834 WWDEBUG_SAY((
"WARNING: Failed to create Render Object: %s\r\n",name));
980 WWPROFILE(
"WW3DAssetManager::Get_HAnim" );
991 char filename[ MAX_PATH ];
992 char *animname = strchr( name,
'.');
993 if (animname !=
NULL) {
994 sprintf( filename,
"%s.w3d", animname+1);
996 WWDEBUG_SAY((
"Animation %s has no . in the name\n", name ));
1034 WWPROFILE(
"WW3DAssetManager::Get_HTree" );
1043 char filename[ MAX_PATH ];
1044 sprintf( filename,
"%s.w3d", name);
1049 new_filename+=filename;
1055 if (htree ==
NULL) {
1077 const char * filename,
1080 bool allow_compression,
1082 bool allow_reduction
1085 WWPROFILE(
"WW3DAssetManager::Get_Texture 1" );
1098 if ((filename ==
NULL) || (strlen(filename) == 0))
1122 tex =
NEW_REF (
TextureClass, (lower_case_name,
NULL, mip_level_count, texture_format, allow_compression, allow_reduction));
1195 temp_textures[count++]=tex;
1197 for (
unsigned i=0;i<256;++i) {
1198 TextureHash.Remove(temp_textures[i]->Get_Texture_Name());
1207 for (
unsigned i=0;i<count;++i) {
1208 TextureHash.Remove(temp_textures[i]->Get_Texture_Name());
1244 "Lightmap textures: %d\n\n"
1246 "--------------------------------------\n"
1268 "Procedural textures: %d\n\n"
1270 "--------------------------------------\n"
1292 "Ordinary textures: %d\n\n"
1294 "--------------------------------------\n"
1332 WWPROFILE(
"WW3DAssetManager::Get_Font3DInstance" );
1351 WWPROFILE(
"WW3DAssetManager::Get_Font3DData" );
1355 if (!stricmp(name, node->Data()->Name)) {
1356 node->Data()->Add_Ref();
1357 return node->Data();
1435 for ( node =
Font3DDatas.Head(); node; node = next) {
1436 next = node->
Next();
1459 WWPROFILE(
"WW3DAssetManager::Get_FontChars" );
1463 if (
FontCharsList[i]->Is_Font( name, point_size, is_bold ) ) {
1542 if (loader && loader->
Chunk_Type() == chunk_id) {
1589 if (proto !=
NULL) {
1594 const char *pname = proto->
Get_Name ();
1595 bool bfound =
false;
1599 (
test !=
NULL) && (bfound ==
false);
1600 test =
test->friend_getNextHash()) {
1603 if (::stricmp (
test->Get_Name(), pname) == 0) {
1647 if (proto !=
NULL) {
1675 if (stricmp(name,
"NULL") == 0) {
1676 return &(_NullPrototype);
1684 if (stricmp(
test->Get_Name(),name) == 0) {
@ W3D_CHUNK_COMPRESSED_ANIMATION
@ W3D_CHUNK_MORPH_ANIMATION
unsigned long CRC_Stringi(const char *string, unsigned long crc)
AggregateLoaderClass _AggregateLoader
BoxLoaderClass _BoxLoader
void Report_Missing_HTree(const char *name)
void Report_Load_On_Demand_RObj(const char *name)
void Report_Missing_RObj(const char *name)
void Report_Missing_HAnim(const char *name)
void Report_Load_On_Demand_HTree(const char *name)
static AssetStatusClass * Peek_Instance()
void Report_Load_On_Demand_HAnim(const char *name)
int Set_Growth_Step(int step)
bool Add(T const &object)
virtual bool Is_Available(int forced=false)=0
virtual void Close(void)=0
virtual int Open(char const *filename, int rights=READ)=0
virtual bool Is_Done(void)
SLNode< Font3DDataClass > * Node
virtual const char * Current_Item_Name(void)
friend class WW3DAssetManager
void Initialize_GDI_Font(const char *font_name, int point_size, bool is_bold)
virtual bool Is_Done(void)
friend class WW3DAssetManager
HAnimManagerIterator Iterator
virtual const char * Current_Item_Name(void)
WWINLINE const char * Get_Name(void) const
virtual const char * Current_Item_Name(void)
virtual bool Is_Done(void)
friend class WW3DAssetManager
HTreeClass * Get_Tree(const char *name)
int Load(FileClass &file)
virtual RenderObjClass * Create(void)=0
virtual const char * Get_Name(void) const =0
virtual void DeleteSelf()=0
void friend_setNextHash(PrototypeClass *n)
virtual PrototypeClass * Load_W3D(ChunkLoadClass &cload)=0
virtual int Chunk_Type(void)=0
friend class WW3DAssetManager
virtual int Current_Item_Class_ID(void)
virtual bool Is_Done(void)
virtual const char * Current_Item_Name(void)
WWINLINE void Release_Ref(void) const
SLNode< T > * Head(void) const
int _cdecl Format(const TCHAR *format,...)
TCHAR * Peek_Buffer(void)
static int _Get_Total_Procedural_Texture_Count()
Get total procedural texture count.
IDirect3DTexture8 * Peek_D3D_Texture() const
bool Is_Procedural() const
const StringClass & Get_Texture_Name(void) const
static int _Get_Total_Texture_Count()
Get total texture count.
static int _Get_Total_Lightmap_Texture_Count()
Get total light map texture count.
bool Is_Initialized() const
virtual unsigned Get_Texture_Memory_Usage() const
Get texture memory usage.
WW3DFormat Get_Texture_Format() const
bool Is_Excluded(PrototypeClass *proto) const
HTreeManagerClass HTreeManager
bool Load_Prototype(ChunkLoadClass &cload)
virtual AssetIterator * Create_HTree_Iterator(void)
virtual void Add_Font3DData(Font3DDataClass *font)
DynamicVectorClass< PrototypeClass * > Prototypes
virtual TextureClass * Get_Texture(const char *filename, MipCountType mip_level_count=MIP_LEVELS_ALL, WW3DFormat texture_format=WW3D_FORMAT_UNKNOWN, bool allow_compression=true, TextureBaseClass::TexAssetType type=TextureBaseClass::TEX_REGULAR, bool allow_reduction=true)
SList< Font3DDataClass > Font3DDatas
@ PROTOTYPE_HASH_TABLE_SIZE
virtual bool Load_3D_Assets(const char *filename)
virtual Font3DDataClass * Get_Font3DData(const char *name)
void Add_Prototype(PrototypeClass *newproto)
PrototypeClass ** PrototypeHashTable
MetalMapManagerClass * MetalManager
virtual void Load_Procedural_Textures()
virtual void Release_All_FontChars(void)
virtual AssetIterator * Create_HAnim_Iterator(void)
TextureFileCache * TextureCache
virtual bool Render_Obj_Exists(const char *name)
virtual void Release_Unused_Textures(void)
virtual void Release_All_Font3DDatas(void)
virtual RenderObjClass * Create_Render_Obj(const char *name)
HAnimManagerClass HAnimManager
virtual ~WW3DAssetManager(void)
HashTemplateClass< StringClass, TextureClass * > & Texture_Hash()
PrototypeClass * Find_Prototype(const char *name)
static WW3DAssetManager * Get_Instance(void)
SimpleDynVecClass< FontCharsClass * > FontCharsList
virtual void Release_Unused_Assets(void)
virtual FontCharsClass * Get_FontChars(const char *name, int point_size, bool is_bold=false)
virtual AssetIterator * Create_Font3DData_Iterator(void)
virtual void Release_Unused_Font3DDatas(void)
PrototypeLoaderClass * Find_Prototype_Loader(int chunk_id)
virtual void Remove_Font3DData(Font3DDataClass *font)
virtual RenderObjIterator * Create_Render_Obj_Iterator(void)
HashTemplateClass< StringClass, TextureClass * > TextureHash
friend class HTreeIterator
virtual void Register_Prototype_Loader(PrototypeLoaderClass *loader)
virtual HAnimClass * Get_HAnim(const char *name)
static void Log_Texture_Statistics()
virtual Font3DInstanceClass * Get_Font3DInstance(const char *name)
static WW3DAssetManager * TheInstance
virtual HTreeClass * Get_HTree(const char *name)
virtual void Release_Render_Obj_Iterator(RenderObjIterator *)
virtual void Release_Texture(TextureClass *)
virtual void Create_Asset_List(DynamicVectorClass< StringClass > &model_exclusion_list)
virtual void Release_All_Textures(void)
friend class Font3DInstanceClass
virtual void Free_Assets(void)
@ PROTOLOADERS_VECTOR_SIZE
@ PROTOLOADERS_GROWTH_RATE
friend class RObjIterator
friend class HAnimIterator
DynamicVectorClass< PrototypeLoaderClass * > PrototypeLoaders
virtual void Free_Assets_With_Exclusion_List(const DynamicVectorClass< StringClass > &model_exclusion_list)
bool Activate_Fog_On_Load
void Remove_Prototype(PrototypeClass *proto)
friend class Font3DDataIterator
CollectionLoaderClass _CollectionLoader
DazzleLoaderClass _DazzleLoader
DistLODLoaderClass _DistLODLoader
DX8MeshRendererClass TheDX8MeshRenderer
WWINLINE void DX8_ErrorCode(unsigned res)
FileFactoryClass * _TheFileFactory
HLodLoaderClass _HLodLoader
NullLoaderClass _NullLoader
HModelLoaderClass _HModelLoader
MeshLoaderClass _MeshLoader
RingLoaderClass _RingLoader
SphereLoaderClass _SphereLoader
#define WWASSERT_PRINT(expr, string)
#define WWMEMLOG(category)