From: Xordan <mg...@us...> - 2007-09-28 13:59:52
|
Update of /cvsroot/planeshift/planeshift/src/common/engine In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2383/src/common/engine Modified Files: celbase.cpp celbase.h materialmanager.cpp materialmanager.h psworld.cpp Log Message: - Moved texture loading from celbase to materialmanager. - Cleaned up celbase a little. Index: celbase.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/common/engine/celbase.cpp,v retrieving revision 1.120 retrieving revision 1.121 diff -C2 -d -r1.120 -r1.121 *** celbase.cpp 28 Sep 2007 09:57:12 -0000 1.120 --- celbase.cpp 28 Sep 2007 13:59:52 -0000 1.121 *************** *** 19,35 **** #include <psconfig.h> - #include <cstool/initapp.h> - #include <csgeom/vector3.h> - #include <ivaria/reporter.h> - #include <ivideo/graph3d.h> - #include <csutil/databuf.h> - #include <iutil/stringarray.h> - #include "engine/celbase.h" #include "util/consoleout.h" - #include "util/pserror.h" - #include "util/psscf.h" - #include "util/strutil.h" - #include "util/psconst.h" #include "util/log.h" --- 19,24 ---- *************** *** 71,100 **** }; - - bool CelBase::Initialize(iObjectRegistry* object_reg) { CelBase::object_reg = object_reg; - csRef<iGraphics3D> g3d; - QUERYPLUG (g3d, iGraphics3D, "iGraphics3d"); - if (!g3d) - { - CPrintf (CON_ERROR, "CelBase: Couldn't query iGraphics3d\n"); - return false; - } - - txtmgr = g3d->GetTextureManager(); - if (!txtmgr) - { - CPrintf (CON_ERROR, "CelBase: Couldn't find texturemanager\n"); - return false; - } - - QUERYPLUG(engine ,iEngine , "iEngine"); - QUERYPLUG(loader ,iLoader , "iLoader"); QUERYPLUG(pluginMgr,iPluginManager, "iPluginManager"); ! QUERYPLUG(vfs ,iVFS , "iVFS"); ! pl = CS_LOAD_PLUGIN(pluginMgr, "cel.physicallayer", iCelPlLayer); if (!pl) --- 60,69 ---- }; bool CelBase::Initialize(iObjectRegistry* object_reg) { CelBase::object_reg = object_reg; QUERYPLUG(pluginMgr,iPluginManager, "iPluginManager"); ! pl = CS_LOAD_PLUGIN(pluginMgr, "cel.physicallayer", iCelPlLayer); if (!pl) *************** *** 130,230 **** } - // temporary till we have a real resource management design - bool CelBase::LoadTexture (const char* txtName, const char* fileName) - { - iTextureWrapper* txt = loader->LoadTexture(txtName, fileName, - CS_TEXTURE_3D, txtmgr, CS_TEXTURE_CREATE_MATERIAL); - - if (!txt) - { - csReport (object_reg, CS_REPORTER_SEVERITY_ERROR, - "planeshift.engine.celbase", - "Error loading texture '%s'!", - fileName); - return false; - } - - pl->Cache (txt); - iMaterialWrapper* mat = engine->GetMaterialList()->FindByName (txtName); - if (mat) - pl->Cache (mat); - - return true; - } - - - bool CelBase::LoadTextureDir(const char *dir) - { - csRef<iDataBuffer> xpath = vfs->ExpandPath(dir); - csRef<iStringArray> files = vfs->FindFiles( **xpath ); - - if (!files) - return false; - - for (size_t i=0; i < files->GetSize(); i++) - { - const char* filename = files->Get(i); - if (strcmp (filename + strlen(filename) - 4, ".png") && - strcmp (filename + strlen(filename) - 4, ".tga") && - strcmp (filename + strlen(filename) - 4, ".gif") && - strcmp (filename + strlen(filename) - 4, ".bmp") && - strcmp (filename + strlen(filename) - 4, ".jpg") && - strcmp (filename + strlen(filename) - 4, ".dds")) - continue; - - // If this is an icon type texture then not required to load as a - // material. - if ( strstr( filename, "_icon" ) ) - continue; - - char* name = csStrNew(filename); - char* onlyname = PS_GetFileName(name); - - if (!LoadTexture(onlyname,filename)) - { - delete[] name; - return false; - } - delete[] name; - } - return true; - } - - bool CelBase::LoadTextures() - { - // characters - if (!LoadTextureDir("/planeshift/models/")) - return false; - - // Load the textures for the weapons. - if (!LoadTextureDir("/planeshift/weapons/")) - return false; - - if (!LoadTextureDir("/planeshift/shields/")) - return false; - - // Load the textures for the items. - if (!LoadTextureDir("/planeshift/items/")) - return false; - - // Load the textures for the spell effects - if (!LoadTextureDir("/planeshift/art/effects/")) - return false; - - // Load the textures for the resources items - if (!LoadTextureDir("/planeshift/naturalres/")) - return false; - - // Load the textures for the tools items - if (!LoadTextureDir("/planeshift/tools/")) - return false; - - // Load the textures for the food items - if (!LoadTextureDir("/planeshift/food/")) - return false; - - return true; - } - bool CelBase::RemoveActor(iCelEntity *entity) { --- 99,102 ---- Index: celbase.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/common/engine/celbase.h,v retrieving revision 1.42 retrieving revision 1.43 diff -C2 -d -r1.42 -r1.43 *** celbase.h 1 Dec 2005 22:09:32 -0000 1.42 --- celbase.h 28 Sep 2007 13:59:52 -0000 1.43 *************** *** 45,58 **** #include <iengine/engine.h> ! #include <iengine/texture.h> ! #include <iengine/material.h> #include <iengine/sector.h> - #include <ivideo/txtmgr.h> - #include <ivideo/texture.h> - #include <ivideo/material.h> - #include <ivideo/graph3d.h> #include <imap/loader.h> #include <iutil/plugin.h> ! #include <iutil/vfs.h> struct iObjectRegistry; --- 45,54 ---- #include <iengine/engine.h> ! #include <iengine/mesh.h> #include <iengine/sector.h> #include <imap/loader.h> + #include <imesh/object.h> #include <iutil/plugin.h> ! #include <ivideo/txtmgr.h> struct iObjectRegistry; *************** *** 77,101 **** bool RemoveItem( iCelEntity* item); - //XXX: this should be protected - bool LoadTextures(); - iCelPlLayer* GetPlLayer() { return pl; } iObjectRegistry* GetObjectReg() { return object_reg; } - bool LoadTexture(const char* txtname, const char* filename); - protected: bool LoadPlugin (const char* pcfactname); - bool LoadTextureDir(const char *dir); iObjectRegistry* object_reg; csRef<iCelPlLayer> pl; - csRef<iTextureManager> txtmgr; csRef<iPluginManager> pluginMgr; ! csRef<iLoader> loader; ! csRef<iEngine> engine; ! csRef<iCelEntity> actors; ! csRef<iVFS> vfs; }; --- 73,87 ---- bool RemoveItem( iCelEntity* item); iCelPlLayer* GetPlLayer() { return pl; } iObjectRegistry* GetObjectReg() { return object_reg; } protected: bool LoadPlugin (const char* pcfactname); iObjectRegistry* object_reg; csRef<iCelPlLayer> pl; csRef<iPluginManager> pluginMgr; ! csRef<iCelEntity> actors; }; Index: materialmanager.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/common/engine/materialmanager.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** materialmanager.cpp 28 Sep 2007 09:57:12 -0000 1.1 --- materialmanager.cpp 28 Sep 2007 13:59:52 -0000 1.2 *************** *** 20,24 **** --- 20,27 ---- #include <psconfig.h> + #include <iutil/stringarray.h> + #include "materialmanager.h" + #include "util/strutil.h" #include "globals.h" *************** *** 30,50 **** engine = csQueryRegistry<iEngine> (object_reg); loader = csQueryRegistry<iLoader> (object_reg); } iMaterialWrapper* MaterialManager::MissingMaterial(const char *name, const char *filename) { ! return engine->GetMaterialList()->FindByName(name); } iTextureWrapper* MaterialManager::MissingTexture(const char *name, const char *filename) { ! // Extract file name from path name, shouldn't need to do this. Is this probably a bug?! ! // name is /planeshift/art/blah/blah.dds and filename is null, instead of name being blah.dds ! // and filename being /planeshift/art/blah/blah.dds ! csString tempName; ! tempName = name; ! size_t last = tempName.FindLast('/'); ! tempName.DeleteAt(0, last+1); ! filename = tempName.GetData(); iTextureWrapper* texture = loader->LoadTexture(filename, name, --- 33,56 ---- engine = csQueryRegistry<iEngine> (object_reg); loader = csQueryRegistry<iLoader> (object_reg); + vfs = csQueryRegistry<iVFS> (object_reg); } iMaterialWrapper* MaterialManager::MissingMaterial(const char *name, const char *filename) { ! return engine->GetMaterialList()->FindByName(filename); } iTextureWrapper* MaterialManager::MissingTexture(const char *name, const char *filename) { ! // name is the material name; /planeshift/blah/blah.dds ! // filename will be blah.dds ! if(!filename) ! { ! csString tempName; ! tempName = name; ! size_t last = tempName.FindLast('/'); ! tempName.DeleteAt(0, last+1); ! filename = tempName.GetData(); ! } iTextureWrapper* texture = loader->LoadTexture(filename, name, *************** *** 61,62 **** --- 67,141 ---- return texture; } + + bool MaterialManager::LoadTextureDir(const char *dir) + { + csRef<iDataBuffer> xpath = vfs->ExpandPath(dir); + csRef<iStringArray> files = vfs->FindFiles( **xpath ); + + if (!files) + return false; + + for (size_t i=0; i < files->GetSize(); i++) + { + const char* filename = files->Get(i); + if (strcmp (filename + strlen(filename) - 4, ".png") && + strcmp (filename + strlen(filename) - 4, ".tga") && + strcmp (filename + strlen(filename) - 4, ".gif") && + strcmp (filename + strlen(filename) - 4, ".bmp") && + strcmp (filename + strlen(filename) - 4, ".jpg") && + strcmp (filename + strlen(filename) - 4, ".dds")) + continue; + + // If this is an icon type texture then not required to load as a + // material. + if ( strstr( filename, "_icon" ) ) + continue; + + char* name = csStrNew(filename); + char* onlyname = PS_GetFileName(name); + + if (!MissingTexture(onlyname,filename)) + { + delete[] name; + return false; + } + delete[] name; + } + return true; + } + + bool MaterialManager::PreloadTextures() + { + // characters + if (!LoadTextureDir("/planeshift/models/")) + return false; + + // Load the textures for the weapons. + if (!LoadTextureDir("/planeshift/weapons/")) + return false; + + if (!LoadTextureDir("/planeshift/shields/")) + return false; + + // Load the textures for the items. + if (!LoadTextureDir("/planeshift/items/")) + return false; + + // Load the textures for the spell effects + if (!LoadTextureDir("/planeshift/art/effects/")) + return false; + + // Load the textures for the resources items + if (!LoadTextureDir("/planeshift/naturalres/")) + return false; + + // Load the textures for the tools items + if (!LoadTextureDir("/planeshift/tools/")) + return false; + + // Load the textures for the food items + if (!LoadTextureDir("/planeshift/food/")) + return false; + + return true; + } Index: materialmanager.h =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/common/engine/materialmanager.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** materialmanager.h 28 Sep 2007 10:02:48 -0000 1.2 --- materialmanager.h 28 Sep 2007 13:59:52 -0000 1.3 *************** *** 21,28 **** #define __MATERIAL_MANAGER_H__ #include <iengine/engine.h> #include <iengine/material.h> #include <imap/loader.h> ! #include <csutil/scf_implementation.h> struct iObjectRegistry; --- 21,30 ---- #define __MATERIAL_MANAGER_H__ + #include <csutil/scf_implementation.h> #include <iengine/engine.h> #include <iengine/material.h> + #include <iengine/texture.h> #include <imap/loader.h> ! #include <iutil/vfs.h> struct iObjectRegistry; *************** *** 47,55 **** --- 49,61 ---- virtual iLight* MissingLight (const char* name) { return 0; } + bool PreloadTextures(); + private: + bool LoadTextureDir(const char *dir); iObjectRegistry* object_reg; csRef<iEngine> engine; csRef<iTextureManager> txtmgr; csRef<iLoader> loader; + csRef<iVFS> vfs; }; Index: psworld.cpp =================================================================== RCS file: /cvsroot/planeshift/planeshift/src/common/engine/psworld.cpp,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** psworld.cpp 27 Sep 2007 22:11:14 -0000 1.20 --- psworld.cpp 28 Sep 2007 13:59:52 -0000 1.21 *************** *** 42,46 **** #include <physicallayer/propclas.h> ! #include "engine/celbase.h" #include "engine/psworld.h" #include "util/psconst.h" --- 42,46 ---- #include <physicallayer/propclas.h> ! #include "engine/materialmanager.h" #include "engine/psworld.h" #include "util/psconst.h" |