#include "precompiled.h" #include #include "TextureManager.h" #include "res/res.h" #include "ogl.h" #include "res/ogl_tex.h" #include "CLogger.h" #include "timer.h" #define LOG_CATEGORY "graphics" // filter for vfs_next_dirent static const char* SupportedTextureFormats[] = { "*.png", "*.dds", "*.tga", "*.bmp" }; CTextureManager::CTextureManager() { m_TerrainTextures.reserve(32); } CTextureManager::~CTextureManager() { for (size_t i=0;iGetName(),filename)==0) { return ttype.m_Textures[i]; } } } return 0; } CTextureEntry* CTextureManager::FindTexture(Handle handle) { for (uint k=0;kIsLoaded() && handle==ttype.m_Textures[i]->GetHandle()) { return ttype.m_Textures[i]; } } } return 0; } CTextureEntry* CTextureManager::AddTexture(const char* filename,int type) { assert((uint)type& textures=m_TerrainTextures[entry->GetType()].m_Textures; typedef std::vector::iterator Iter; Iter i=std::find(textures.begin(),textures.end(),entry); if (i!=textures.end()) { textures.erase(i); } delete entry; } void CTextureManager::LoadTerrainTexturesImpl(int terraintype,const char* fileext_filter) { CStr pathname("art/textures/terrain/types/"); pathname+=m_TerrainTextures[terraintype].m_Name; pathname+="/"; Handle dir=vfs_open_dir(pathname.c_str()); vfsDirEnt dent; if (dir > 0) { while (vfs_next_dirent(dir, &dent, fileext_filter) == 0) { LOG(NORMAL, LOG_CATEGORY, "CTextureManager::LoadTerrainTextures(): texture %s added to type %s", dent.name, m_TerrainTextures[terraintype].m_Name.c_str()); AddTexture(dent.name, terraintype); } vfs_close_dir(dir); } } void CTextureManager::BuildTerrainTypes() { Handle dir=vfs_open_dir("art/textures/terrain/types/"); vfsDirEnt dent; if (dir > 0) { while (vfs_next_dirent(dir, &dent, "/") == 0) { AddTextureType(dent.name); } vfs_close_dir(dir); } } int CTextureManager::LoadTerrainTextures() { // find all the terrain types by directory name BuildTerrainTypes(); // now iterate through terrain types loading all textures of that type for (uint i=0;i