// Copyright (C) 2007 Id Software, Inc. // #ifndef __MODELMANAGER_H__ #define __MODELMANAGER_H__ /* =============================================================================== Model Manager Temporarily created models do not need to be added to the model manager. =============================================================================== */ class idRenderModel; class idRenderModelManager { public: virtual ~idRenderModelManager() {} // registers console commands and clears the list virtual void Init() = 0; // frees all the models virtual void Shutdown() = 0; // called only by renderer::BeginLevelLoad virtual void BeginLevelLoad() = 0; // called only by renderer::EndLevelLoad virtual void EndLevelLoad() = 0; // allocates a new empty render model. virtual idRenderModel * AllocModel() = 0; // frees a render model virtual void FreeModel( idRenderModel *model ) = 0; // returns NULL if modelName is NULL or an empty string, otherwise // it will create a default model if not loadable virtual idRenderModel * FindModel( const char *modelName ) = 0; // returns NULL if not loadable virtual idRenderModel * CheckModel( const char *modelName ) = 0; // returns NULL if not loaded virtual idRenderModel * GetModel( const char *modelName ) = 0; // returns the default cube model virtual idRenderModel * DefaultModel() = 0; // world map parsing will add all the inline models with this call virtual void AddModel( idRenderModel *model ) = 0; // when a world map unloads, it removes its internal models from the list // before freeing them. // There may be an issue with multiple renderWorlds that share data... virtual void RemoveModel( idRenderModel *model ) = 0; // the reloadModels console command calls this, but it can // also be explicitly invoked virtual void ReloadModels( bool forceAll = false ) = 0; // write "touchModel " commands for each non-world-map model virtual void WritePrecacheCommands( idFile *f ) = 0; // called during vid_restart virtual void FreeModelVertexCaches() = 0; virtual bool WriteSurfaceModel( const char* modelName, idList< idSurface* >& surfaces, idStrList& materials ) = 0; virtual bool WriteTriangleModelB( const char *modelName, idRenderModel *model ) = 0; virtual bool WriteTriangleModel( const char *modelName, idRenderModel *model ) = 0; }; // this will be statically pointed at a private implementation extern idRenderModelManager *renderModelManager; #endif /* !__MODELMANAGER_H__ */