@@ -373,10 +373,9 @@ asset::SAssetBundle COBJMeshFileLoader::loadAsset(io::IReadFile* _file, const as
373
373
// eat up rest of line
374
374
bufPtr = goNextLine (bufPtr, bufEnd);
375
375
} // end while(bufPtr && (bufPtr-buf<filesize))
376
-
377
- auto meta = core::make_smart_refctd_ptr<COBJMetadata>(pipelines. size ()+ 1u ) ;
376
+
377
+ core::unordered_set< pipeline_meta_pair_t , hash_t , key_equal_t > usedPipelines ;
378
378
{
379
- uint32_t metaOffset = 0u ;
380
379
uint64_t ixBufOffset = 0ull ;
381
380
for (size_t i = 0ull ; i < submeshes.size (); ++i)
382
381
{
@@ -389,11 +388,14 @@ asset::SAssetBundle COBJMeshFileLoader::loadAsset(io::IReadFile* _file, const as
389
388
ixBufOffset += indices[i].size ()*4ull ;
390
389
391
390
const uint32_t hasUV = !core::isnan (vertices[indices[i][0 ]].uv [0 ]);
391
+ #ifdef _NBL_DEBUG_OBJ_LOADER_
392
+ os::Printer::log (" Has UV: " , hasUV ? " YES" :" NO" , ELL_DEBUG);
393
+ #endif
392
394
// search in loaded
393
395
pipeline_meta_pair_t pipeline;
394
396
{
395
397
CMTLMetadata::CRenderpassIndependentPipeline dummyKey;
396
- dummyKey.m_name = submeshCacheKeys[i];
398
+ dummyKey.m_name = submeshCacheKeys[i]. substr (submeshCacheKeys[i]. find_last_of ( ' ? ' )+ 1u ) ;
397
399
pipeline_meta_pair_t dummy{nullptr ,&dummyKey};
398
400
399
401
auto rng = pipelines.equal_range (dummy);
@@ -442,8 +444,7 @@ asset::SAssetBundle COBJMeshFileLoader::loadAsset(io::IReadFile* _file, const as
442
444
sizeof (CMTLMetadata::CRenderpassIndependentPipeline::SMaterialParameters)
443
445
);
444
446
445
- meta->placeMeta (metaOffset++,pipeline.first .get (),*pipeline.second );
446
-
447
+ usedPipelines.insert (pipeline);
447
448
submeshes[i]->setPipeline (std::move (pipeline.first ));
448
449
}
449
450
@@ -491,6 +492,11 @@ asset::SAssetBundle COBJMeshFileLoader::loadAsset(io::IReadFile* _file, const as
491
492
if (mesh->getMeshBuffers ().empty ())
492
493
return {};
493
494
495
+ //
496
+ auto meta = core::make_smart_refctd_ptr<COBJMetadata>(usedPipelines.size ()+1u );
497
+ for (auto pipeAndMeta : usedPipelines)
498
+ meta->placeMeta (metaOffset++,pipeAndMeta.first .get (),*pipeAndMeta.second );
499
+
494
500
// at the very end, insert submeshes into cache
495
501
uint32_t i = 0u ;
496
502
for (auto meshbuffer : mesh->getMeshBuffers ())
0 commit comments