mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-03-14 22:50:45 +00:00
Hook idImportOptions into idRenderModel*::InitFromFile()
This commit is contained in:
parent
81d70dc5d8
commit
6cbb205ece
10 changed files with 40 additions and 25 deletions
|
@ -295,7 +295,7 @@ idRenderModelStatic::PartialInitFromFile
|
|||
void idRenderModelStatic::PartialInitFromFile( const char* fileName )
|
||||
{
|
||||
fastLoad = true;
|
||||
InitFromFile( fileName );
|
||||
InitFromFile( fileName, nullptr );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -303,15 +303,13 @@ void idRenderModelStatic::PartialInitFromFile( const char* fileName )
|
|||
idRenderModelStatic::InitFromFile
|
||||
================
|
||||
*/
|
||||
void idRenderModelStatic::InitFromFile( const char* fileName )
|
||||
void idRenderModelStatic::InitFromFile( const char* fileName, idImportOptions* options )
|
||||
{
|
||||
bool loaded;
|
||||
idStr extension;
|
||||
|
||||
InitEmpty( fileName );
|
||||
|
||||
// FIXME: load new .proc map format
|
||||
|
||||
ID_TIME_T sourceTimeStamp;
|
||||
|
||||
name.ExtractFileExtension( extension );
|
||||
|
@ -872,7 +870,7 @@ idRenderModelStatic::LoadModel
|
|||
void idRenderModelStatic::LoadModel()
|
||||
{
|
||||
PurgeModel();
|
||||
InitFromFile( name );
|
||||
InitFromFile( name, nullptr );
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -62,6 +62,7 @@ struct dominantTri_t
|
|||
const int SHADOW_CAP_INFINITE = 64;
|
||||
|
||||
class idRenderModelStatic;
|
||||
class idImportOptions;
|
||||
struct viewDef_t;
|
||||
|
||||
// our only drawing geometry type
|
||||
|
@ -168,7 +169,7 @@ public:
|
|||
virtual ~idRenderModel() {};
|
||||
|
||||
// Loads static models only, dynamic models must be loaded by the modelManager
|
||||
virtual void InitFromFile( const char* fileName ) = 0;
|
||||
virtual void InitFromFile( const char* fileName, idImportOptions* options ) = 0;
|
||||
|
||||
// Supports reading/writing binary file formats
|
||||
virtual bool LoadBinaryModel( idFile* file, const ID_TIME_T sourceTimeStamp ) = 0;
|
||||
|
|
|
@ -50,7 +50,7 @@ public:
|
|||
virtual void Shutdown();
|
||||
virtual idRenderModel* AllocModel();
|
||||
virtual void FreeModel( idRenderModel* model );
|
||||
virtual idRenderModel* FindModel( const char* modelName );
|
||||
virtual idRenderModel* FindModel( const char* modelName, idImportOptions* options = nullptr );
|
||||
virtual idRenderModel* CheckModel( const char* modelName );
|
||||
virtual idRenderModel* DefaultModel();
|
||||
virtual void AddModel( idRenderModel* model );
|
||||
|
@ -72,7 +72,7 @@ private:
|
|||
idRenderModel* spriteModel;
|
||||
bool insideLevelLoad; // don't actually load now
|
||||
|
||||
idRenderModel* GetModel( const char* modelName, bool createIfNotFound );
|
||||
idRenderModel* GetModel( const char* modelName, bool createIfNotFound, idImportOptions* options );
|
||||
|
||||
static void PrintModel_f( const idCmdArgs& args );
|
||||
static void ListModels_f( const idCmdArgs& args );
|
||||
|
@ -278,7 +278,7 @@ void idRenderModelManagerLocal::Shutdown()
|
|||
idRenderModelManagerLocal::GetModel
|
||||
=================
|
||||
*/
|
||||
idRenderModel* idRenderModelManagerLocal::GetModel( const char* _modelName, bool createIfNotFound )
|
||||
idRenderModel* idRenderModelManagerLocal::GetModel( const char* _modelName, bool createIfNotFound, idImportOptions* options )
|
||||
{
|
||||
|
||||
if( !_modelName || !_modelName[0] )
|
||||
|
@ -342,10 +342,12 @@ idRenderModel* idRenderModelManagerLocal::GetModel( const char* _modelName, bool
|
|||
// determine which subclass of idRenderModel to initialize
|
||||
|
||||
idRenderModel* model = NULL;
|
||||
bool isGLTF = false;
|
||||
// HvG: GLTF 2 support
|
||||
if( ( extension.Icmp( GLTF_GLB_EXT ) == 0 ) || ( extension.Icmp( GLTF_EXT ) == 0 ) )
|
||||
{
|
||||
model = new( TAG_MODEL ) idRenderModelGLTF;
|
||||
isGLTF = true;
|
||||
}
|
||||
// RB: Collada DAE and Wavefront OBJ
|
||||
else if( ( extension.Icmp( "dae" ) == 0 ) || ( extension.Icmp( "obj" ) == 0 ) // RB: Collada DAE and Wavefront OBJ
|
||||
|
@ -380,19 +382,33 @@ idRenderModel* idRenderModelManagerLocal::GetModel( const char* _modelName, bool
|
|||
generatedFileName.SetFileExtension( va( "b%s", extension.c_str() ) );
|
||||
|
||||
// Get the timestamp on the original file, if it's newer than what is stored in binary model, regenerate it
|
||||
ID_TIME_T sourceTimeStamp = fileSystem->GetTimestamp( canonical );
|
||||
ID_TIME_T sourceTimeStamp;
|
||||
|
||||
if( isGLTF )
|
||||
{
|
||||
idStr gltfFileName = idStr( canonical );
|
||||
int gltfMeshId = -1;
|
||||
idStr gltfMeshName;
|
||||
gltfManager::ExtractIdentifier( gltfFileName, gltfMeshId, gltfMeshName );
|
||||
|
||||
sourceTimeStamp = fileSystem->GetTimestamp( gltfFileName );
|
||||
}
|
||||
else
|
||||
{
|
||||
sourceTimeStamp = fileSystem->GetTimestamp( canonical );
|
||||
}
|
||||
|
||||
idFileLocal file( fileSystem->OpenFileReadMemory( generatedFileName ) );
|
||||
|
||||
if( !model->SupportsBinaryModel() || !binaryLoadRenderModels.GetBool() )
|
||||
{
|
||||
model->InitFromFile( canonical );
|
||||
model->InitFromFile( canonical, options );
|
||||
}
|
||||
else
|
||||
{
|
||||
if( !model->LoadBinaryModel( file, sourceTimeStamp ) )
|
||||
{
|
||||
model->InitFromFile( canonical );
|
||||
model->InitFromFile( canonical, options );
|
||||
|
||||
// RB: default models shouldn't be cached as binary models
|
||||
if( !model->IsDefaultModel() )
|
||||
|
@ -538,9 +554,9 @@ void idRenderModelManagerLocal::FreeModel( idRenderModel* model )
|
|||
idRenderModelManagerLocal::FindModel
|
||||
=================
|
||||
*/
|
||||
idRenderModel* idRenderModelManagerLocal::FindModel( const char* modelName )
|
||||
idRenderModel* idRenderModelManagerLocal::FindModel( const char* modelName, idImportOptions* options )
|
||||
{
|
||||
return GetModel( modelName, true );
|
||||
return GetModel( modelName, true, options );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -550,7 +566,7 @@ idRenderModelManagerLocal::CheckModel
|
|||
*/
|
||||
idRenderModel* idRenderModelManagerLocal::CheckModel( const char* modelName )
|
||||
{
|
||||
return GetModel( modelName, false );
|
||||
return GetModel( modelName, false, nullptr );
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -130,7 +130,7 @@ public:
|
|||
|
||||
// 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;
|
||||
virtual idRenderModel* FindModel( const char* modelName, idImportOptions* options = nullptr ) = 0;
|
||||
|
||||
// returns NULL if not loadable
|
||||
virtual idRenderModel* CheckModel( const char* modelName ) = 0;
|
||||
|
|
|
@ -135,7 +135,7 @@ void idRenderModelGLTF::ProcessNode_r( gltfNode* modelNode, idMat4 parentTransfo
|
|||
// warning : nodeName cannot have dots!
|
||||
//[fileName].[nodeName/nodeId].[gltf/glb]
|
||||
//If no nodeName/nodeId is given, all primitives active in default scene will be added as surfaces.
|
||||
void idRenderModelGLTF::InitFromFile( const char* fileName )
|
||||
void idRenderModelGLTF::InitFromFile( const char* fileName, idImportOptions* options )
|
||||
{
|
||||
hasAnimations = false;
|
||||
fileExclusive = false;
|
||||
|
|
|
@ -32,7 +32,7 @@ If you have questions concerning this license or the applicable additional terms
|
|||
class idRenderModelGLTF : public idRenderModelStatic
|
||||
{
|
||||
public:
|
||||
virtual void InitFromFile( const char* fileName ) override;
|
||||
virtual void InitFromFile( const char* fileName, idImportOptions* options ) override;
|
||||
virtual bool LoadBinaryModel( idFile* file, const ID_TIME_T sourceTimeStamp ) override;
|
||||
virtual void WriteBinaryModel( idFile* file, ID_TIME_T* _timeStamp = NULL ) const override;
|
||||
virtual dynamicModel_t IsDynamicModel() const override;
|
||||
|
|
|
@ -373,7 +373,7 @@ void idRenderModelLiquid::Reset()
|
|||
idRenderModelLiquid::InitFromFile
|
||||
====================
|
||||
*/
|
||||
void idRenderModelLiquid::InitFromFile( const char* fileName )
|
||||
void idRenderModelLiquid::InitFromFile( const char* fileName, idImportOptions* options )
|
||||
{
|
||||
int i, x, y;
|
||||
idToken token;
|
||||
|
|
|
@ -52,7 +52,7 @@ public:
|
|||
idRenderModelStatic();
|
||||
virtual ~idRenderModelStatic();
|
||||
|
||||
virtual void InitFromFile( const char* fileName );
|
||||
virtual void InitFromFile( const char* fileName, idImportOptions* options );
|
||||
virtual bool LoadBinaryModel( idFile* file, const ID_TIME_T sourceTimeStamp );
|
||||
virtual void WriteBinaryModel( idFile* file, ID_TIME_T* _timeStamp = NULL ) const;
|
||||
virtual bool SupportsBinaryModel()
|
||||
|
@ -216,7 +216,7 @@ class idRenderModelMD5 : public idRenderModelStatic
|
|||
{
|
||||
friend class idRenderModelGLTF;
|
||||
public:
|
||||
virtual void InitFromFile( const char* fileName );
|
||||
virtual void InitFromFile( const char* fileName, idImportOptions* options );
|
||||
virtual bool LoadBinaryModel( idFile* file, const ID_TIME_T sourceTimeStamp );
|
||||
virtual void WriteBinaryModel( idFile* file, ID_TIME_T* _timeStamp = NULL ) const;
|
||||
virtual dynamicModel_t IsDynamicModel() const;
|
||||
|
@ -268,7 +268,7 @@ struct md3Surface_s;
|
|||
class idRenderModelMD3 : public idRenderModelStatic
|
||||
{
|
||||
public:
|
||||
virtual void InitFromFile( const char* fileName );
|
||||
virtual void InitFromFile( const char* fileName, idImportOptions* options );
|
||||
virtual bool SupportsBinaryModel()
|
||||
{
|
||||
return false;
|
||||
|
@ -299,7 +299,7 @@ class idRenderModelLiquid : public idRenderModelStatic
|
|||
public:
|
||||
idRenderModelLiquid();
|
||||
|
||||
virtual void InitFromFile( const char* fileName );
|
||||
virtual void InitFromFile( const char* fileName, idImportOptions* options );
|
||||
virtual bool SupportsBinaryModel()
|
||||
{
|
||||
return false;
|
||||
|
|
|
@ -46,7 +46,7 @@ If you have questions concerning this license or the applicable additional terms
|
|||
idRenderModelMD3::InitFromFile
|
||||
=================
|
||||
*/
|
||||
void idRenderModelMD3::InitFromFile( const char* fileName )
|
||||
void idRenderModelMD3::InitFromFile( const char* fileName, idImportOptions* options )
|
||||
{
|
||||
int i, j;
|
||||
md3Header_t* pinmodel;
|
||||
|
|
|
@ -706,7 +706,7 @@ void idRenderModelMD5::ParseJoint( idLexer& parser, idMD5Joint* joint, idJointQu
|
|||
idRenderModelMD5::InitFromFile
|
||||
====================
|
||||
*/
|
||||
void idRenderModelMD5::InitFromFile( const char* fileName )
|
||||
void idRenderModelMD5::InitFromFile( const char* fileName, idImportOptions* options )
|
||||
{
|
||||
name = fileName;
|
||||
LoadModel();
|
||||
|
|
Loading…
Reference in a new issue