From 44c4ba9e461130ec80e2d932d7d01ad8b33ee05a Mon Sep 17 00:00:00 2001 From: HarrievG Date: Sun, 19 Jun 2022 22:19:27 +0200 Subject: [PATCH] - if no meshname is given while trying to load a idRenderModelGLTF, add all primitives from the default scene of that gltf as surfaces --- neo/renderer/Model_gltf.cpp | 39 ++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/neo/renderer/Model_gltf.cpp b/neo/renderer/Model_gltf.cpp index c74d388c..05835304 100644 --- a/neo/renderer/Model_gltf.cpp +++ b/neo/renderer/Model_gltf.cpp @@ -533,28 +533,39 @@ void idRenderModelGLTF::InitFromFile( const char* fileName ) bounds.Clear(); - if (!meshName[0]) - meshName = "head"; + int sceneId = data->DefaultScene(); - gltfNode* modelNode = data->GetNode( "models", meshName ); - if( modelNode ) + assert( sceneId >= 0 ); + + if ( !meshName[0] ) { - ProcessNode( modelNode, mat4_identity, data ); - - if ( surfaces.Num( ) <= 0 ) { - common->Warning( "Couldn't load model: '%s'", name.c_str( ) ); - MakeDefaultModel( ); - return; + auto & nodeList = data->NodeList(); + for( auto& nodeID : data->SceneList()[sceneId]->nodes ) + { + gltfNode *modelNode = nodeList[nodeID]; + assert ( modelNode ); + ProcessNode( modelNode, mat4_identity, data ); } - - // it is now available for use - purged = false; } else { - common->Warning( " gltfNode %s not found in models scene" ); + gltfNode *modelNode = data->GetNode( "models", meshName ); + if ( modelNode ) + { + ProcessNode( modelNode, mat4_identity, data ); + } } + + if ( surfaces.Num( ) <= 0 ) { + common->Warning( "Couldn't load model: '%s'", name.c_str( ) ); + MakeDefaultModel( ); + return; + } + + // it is now available for use + purged = false; + //skin //gltfNode * modelNode = data->GetNode(data->SceneList()[data->GetSceneId("models")],targetMesh); //__debugbreak();