Skip to content

Commit 3c57de5

Browse files
almost fixed OBJ loader
1 parent 60b6275 commit 3c57de5

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

src/nbl/asset/interchange/COBJMeshFileLoader.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -373,10 +373,9 @@ asset::SAssetBundle COBJMeshFileLoader::loadAsset(io::IReadFile* _file, const as
373373
// eat up rest of line
374374
bufPtr = goNextLine(bufPtr, bufEnd);
375375
} // 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;
378378
{
379-
uint32_t metaOffset = 0u;
380379
uint64_t ixBufOffset = 0ull;
381380
for (size_t i = 0ull; i < submeshes.size(); ++i)
382381
{
@@ -389,11 +388,14 @@ asset::SAssetBundle COBJMeshFileLoader::loadAsset(io::IReadFile* _file, const as
389388
ixBufOffset += indices[i].size()*4ull;
390389

391390
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
392394
// search in loaded
393395
pipeline_meta_pair_t pipeline;
394396
{
395397
CMTLMetadata::CRenderpassIndependentPipeline dummyKey;
396-
dummyKey.m_name = submeshCacheKeys[i];
398+
dummyKey.m_name = submeshCacheKeys[i].substr(submeshCacheKeys[i].find_last_of('?')+1u);
397399
pipeline_meta_pair_t dummy{nullptr,&dummyKey};
398400

399401
auto rng = pipelines.equal_range(dummy);
@@ -442,8 +444,7 @@ asset::SAssetBundle COBJMeshFileLoader::loadAsset(io::IReadFile* _file, const as
442444
sizeof(CMTLMetadata::CRenderpassIndependentPipeline::SMaterialParameters)
443445
);
444446

445-
meta->placeMeta(metaOffset++,pipeline.first.get(),*pipeline.second);
446-
447+
usedPipelines.insert(pipeline);
447448
submeshes[i]->setPipeline(std::move(pipeline.first));
448449
}
449450

@@ -491,6 +492,11 @@ asset::SAssetBundle COBJMeshFileLoader::loadAsset(io::IReadFile* _file, const as
491492
if (mesh->getMeshBuffers().empty())
492493
return {};
493494

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+
494500
//at the very end, insert submeshes into cache
495501
uint32_t i = 0u;
496502
for (auto meshbuffer : mesh->getMeshBuffers())

0 commit comments

Comments
 (0)