@@ -124,7 +124,15 @@ void ResourceManager::buildImporters() {
124124
125125} // buildImporters
126126
127+ bool ResourceManager::getCreateRenderer () const {
128+ return metadataMediator_->getCreateRenderer ();
129+ }
130+
127131void ResourceManager::initDefaultPrimAttributes () {
132+ if (!getCreateRenderer ()) {
133+ return ;
134+ }
135+
128136 // by this point, we should have a GL::Context so load the bb primitive.
129137 // TODO: replace this completely with standard mesh (i.e. treat the bb
130138 // wireframe cube no differently than other primivite-based rendered
@@ -996,7 +1004,9 @@ void ResourceManager::buildPrimitiveAssetData(
9961004 // compute the mesh bounding box
9971005 primMeshData->BB = computeMeshBB (primMeshData.get ());
9981006
999- primMeshData->uploadBuffersToGPU (false );
1007+ if (getCreateRenderer ()) {
1008+ primMeshData->uploadBuffersToGPU (false );
1009+ }
10001010
10011011 // make MeshMetaData
10021012 int meshStart = nextMeshID_++;
@@ -1100,7 +1110,9 @@ scene::SceneNode* ResourceManager::createRenderAssetInstancePTex(
11001110 for (int iMesh = start; iMesh <= end; ++iMesh) {
11011111 auto * pTexMeshData = dynamic_cast <PTexMeshData*>(meshes_.at (iMesh).get ());
11021112
1103- pTexMeshData->uploadBuffersToGPU (false );
1113+ if (getCreateRenderer ()) {
1114+ pTexMeshData->uploadBuffersToGPU (false );
1115+ }
11041116
11051117 for (int jSubmesh = 0 ; jSubmesh < pTexMeshData->getSize (); ++jSubmesh) {
11061118 scene::SceneNode& node = instanceRoot->createChild ();
@@ -1160,7 +1172,9 @@ bool ResourceManager::loadRenderAssetIMesh(const AssetInfo& info) {
11601172
11611173 for (int meshIDLocal = 0 ; meshIDLocal < instanceMeshes.size ();
11621174 ++meshIDLocal) {
1163- instanceMeshes[meshIDLocal]->uploadBuffersToGPU (false );
1175+ if (getCreateRenderer ()) {
1176+ instanceMeshes[meshIDLocal]->uploadBuffersToGPU (false );
1177+ }
11641178 meshes_.emplace (meshStart + meshIDLocal,
11651179 std::move (instanceMeshes[meshIDLocal]));
11661180
@@ -1204,7 +1218,7 @@ scene::SceneNode* ResourceManager::createRenderAssetInstanceIMesh(
12041218 // That means One CANNOT query the data like e.g.,
12051219 // meshes_.at(iMesh)->getMeshData()->hasAttribute(Mn::Trade::MeshAttribute::Tangent)
12061220 // It will SEGFAULT!
1207- createDrawable (*( meshes_.at (iMesh)->getMagnumGLMesh () ), // render mesh
1221+ createDrawable (meshes_.at (iMesh)->getMagnumGLMesh (), // render mesh
12081222 meshAttributeFlags, // mesh attribute flags
12091223 node, // scene node
12101224 creation.lightSetupKey , // lightSetup key
@@ -1239,7 +1253,8 @@ bool ResourceManager::loadRenderAssetGeneral(const AssetInfo& info) {
12391253 assimpmetadata->configuration ().setValue (" ImportColladaIgnoreUpDirection" ,
12401254 " true" );
12411255#endif
1242- {
1256+
1257+ if (requiresTextures_) {
12431258 Cr::PluginManager::PluginMetadata* const metadata =
12441259 importerManager_.metadata (" BasisImporter" );
12451260 Mn::GL ::Context& context = Mn::GL::Context::current ();
@@ -1460,6 +1475,8 @@ bool ResourceManager::buildTrajectoryVisualization(
14601475 // compute the mesh bounding box
14611476 visMeshData->BB = computeMeshBB (visMeshData.get ());
14621477
1478+ ESP_CHECK (getCreateRenderer (),
1479+ " buildTrajectoryVisualization requires a renderer" );
14631480 visMeshData->uploadBuffersToGPU (false );
14641481
14651482 // make MeshMetaData
@@ -1507,8 +1524,13 @@ int ResourceManager::loadNavMeshVisualization(esp::nav::PathFinder& pathFinder,
15071524 DrawableGroup* drawables) {
15081525 int navMeshPrimitiveID = ID_UNDEFINED ;
15091526
1510- if (!pathFinder.isLoaded ())
1527+ if (!pathFinder.isLoaded ()) {
15111528 return navMeshPrimitiveID;
1529+ }
1530+
1531+ if (!getCreateRenderer ()) {
1532+ return navMeshPrimitiveID;
1533+ }
15121534
15131535 // create the mesh
15141536 std::vector<Magnum::UnsignedInt> indices;
@@ -1795,7 +1817,9 @@ void ResourceManager::loadMeshes(Importer& importer,
17951817 // compute the mesh bounding box
17961818 gltfMeshData->BB = computeMeshBB (gltfMeshData.get ());
17971819
1798- gltfMeshData->uploadBuffersToGPU (false );
1820+ if (getCreateRenderer ()) {
1821+ gltfMeshData->uploadBuffersToGPU (false );
1822+ }
17991823 meshes_.emplace (meshStart + iMesh, std::move (gltfMeshData));
18001824 }
18011825} // ResourceManager::loadMeshes
@@ -2058,7 +2082,15 @@ void ResourceManager::addComponent(
20582082 // Add a drawable if the object has a mesh and the mesh is loaded
20592083 if (meshIDLocal != ID_UNDEFINED ) {
20602084 const int meshID = metaData.meshIndex .first + meshIDLocal;
2061- Magnum::GL ::Mesh& mesh = *meshes_.at (meshID)->getMagnumGLMesh ();
2085+ Magnum::GL ::Mesh* mesh = meshes_.at (meshID)->getMagnumGLMesh ();
2086+ if (getCreateRenderer ()) {
2087+ CORRADE_ASSERT (mesh,
2088+ " ::addComponent() : GL mesh expected but not found" , );
2089+ } else {
2090+ CORRADE_ASSERT (!mesh,
2091+ " addComponent() : encountered unexpected GL mesh with "
2092+ " createRenderer==false" , );
2093+ }
20622094 Mn::ResourceKey materialKey = meshTransformNode.materialID ;
20632095
20642096 gfx::Drawable::Flags meshAttributeFlags{};
@@ -2115,20 +2147,20 @@ void ResourceManager::addPrimitiveToDrawables(int primitiveID,
21152147 // so do not need to worry about the tangent or bitangent.
21162148 // it might be changed in the future.
21172149 gfx::Drawable::Flags meshAttributeFlags{};
2118- createDrawable (* primitive_meshes_.at (primitiveID), // render mesh
2119- meshAttributeFlags, // meshAttributeFlags
2120- node, // scene node
2121- NO_LIGHT_KEY , // lightSetup key
2122- WHITE_MATERIAL_KEY , // material key
2123- drawables); // drawable group
2150+ createDrawable (primitive_meshes_.at (primitiveID). get ( ), // render mesh
2151+ meshAttributeFlags, // meshAttributeFlags
2152+ node, // scene node
2153+ NO_LIGHT_KEY , // lightSetup key
2154+ WHITE_MATERIAL_KEY , // material key
2155+ drawables); // drawable group
21242156}
21252157
21262158void ResourceManager::removePrimitiveMesh (int primitiveID) {
21272159 CHECK (primitive_meshes_.count (primitiveID));
21282160 primitive_meshes_.erase (primitiveID);
21292161}
21302162
2131- void ResourceManager::createDrawable (Mn::GL ::Mesh& mesh,
2163+ void ResourceManager::createDrawable (Mn::GL ::Mesh* mesh,
21322164 gfx::Drawable::Flags& meshAttributeFlags,
21332165 scene::SceneNode& node,
21342166 const Mn::ResourceKey& lightSetupKey,
@@ -2508,5 +2540,6 @@ void ResourceManager::createConvexHullDecomposition(
25082540 }
25092541}
25102542#endif
2543+
25112544} // namespace assets
25122545} // namespace esp
0 commit comments