Skip to content

Commit 10a1004

Browse files
author
devsh
committed
turn createView into a general function in IGeometryLoader
1 parent 5f17472 commit 10a1004

File tree

3 files changed

+18
-30
lines changed

3 files changed

+18
-30
lines changed

include/nbl/asset/interchange/IGeometryLoader.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,20 @@ class IGeometryLoader : public IAssetLoader
2323
protected:
2424
inline IGeometryLoader() {}
2525

26+
static inline IGeometry<ICPUBuffer>::SDataView createView(const E_FORMAT format, const size_t elementCount, const void* data=nullptr)
27+
{
28+
const auto stride = getTexelOrBlockBytesize(format);
29+
auto buffer = ICPUBuffer::create({{stride*elementCount},const_cast<void*>(data)});
30+
return {
31+
.composed = {
32+
.stride = stride,
33+
.format = format,
34+
.rangeFormat = IGeometryBase::getMatchingAABBFormat(format)
35+
},
36+
.src = {.offset=0,.size=buffer->getSize(),.buffer=std::move(buffer)}
37+
};
38+
}
39+
2640
private:
2741
};
2842

src/nbl/asset/interchange/CPLYMeshFileLoader.cpp

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -625,24 +625,6 @@ SAssetBundle CPLYMeshFileLoader::loadAsset(system::IFile* _file, const IAssetLoa
625625
// now to read the actual data from the file
626626
using index_t = uint32_t;
627627
core::vector<index_t> indices = {};
628-
//
629-
auto createView = [](const E_FORMAT format, const size_t elCount)->ICPUPolygonGeometry::SDataView
630-
{
631-
const auto stride = asset::getTexelOrBlockBytesize(format);
632-
auto buffer = ICPUBuffer::create({stride*elCount});
633-
return {
634-
.composed = {
635-
.stride = stride,
636-
.format = format,
637-
.rangeFormat = IGeometryBase::getMatchingAABBFormat(format)
638-
},
639-
.src = {
640-
.offset = 0,
641-
.size = buffer->getSize(),
642-
.buffer = std::move(buffer)
643-
}
644-
};
645-
};
646628

647629
// loop through each of the elements
648630
bool verticesProcessed = false;
@@ -882,19 +864,11 @@ SAssetBundle CPLYMeshFileLoader::loadAsset(system::IFile* _file, const IAssetLoa
882864
else
883865
{
884866
geometry->setIndexing(IPolygonGeometryBase::TriangleList());
885-
auto buffer = ICPUBuffer::create({{indices.size()*sizeof(index_t),IBuffer::EUF_INDEX_BUFFER_BIT},indices.data()});
886-
hlsl::shapes::AABB<4,index_t> aabb;
867+
auto view = IGeometryLoader::createView(EF_R32_UINT,indices.size(),indices.data());
868+
auto& aabb = view.composed.encodedDataRange.u32;
887869
aabb.minVx[0] = *std::min_element(indices.begin(),indices.end());
888870
aabb.maxVx[0] = *std::max_element(indices.begin(),indices.end());
889-
geometry->setIndexView({
890-
.composed = {
891-
.encodedDataRange = {.u32=aabb},
892-
.stride = sizeof(index_t),
893-
.format = EF_R32_UINT,
894-
.rangeFormat = IGeometryBase::EAABBFormat::U32
895-
},
896-
.src = {.offset=0,.size=buffer->getSize(),.buffer=std::move(buffer)}
897-
});
871+
geometry->setIndexView(std::move(view));
898872
}
899873

900874
CPolygonGeometryManipulator::recomputeContentHashes(geometry.get());

src/nbl/asset/interchange/CPLYMeshFileLoader.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class CPLYMeshFileLoader final : public IGeometryLoader
3131
}
3232

3333
//! creates/loads an animated mesh from the file.
34-
virtual SAssetBundle loadAsset(system::IFile* _file, const IAssetLoader::SAssetLoadParams& _params, IAssetLoader::IAssetLoaderOverride* _override = nullptr, uint32_t _hierarchyLevel = 0u) override;
34+
SAssetBundle loadAsset(system::IFile* _file, const IAssetLoader::SAssetLoadParams& _params, IAssetLoader::IAssetLoaderOverride* _override = nullptr, uint32_t _hierarchyLevel = 0u) override;
3535
};
3636

3737
} // end namespace nbl::asset

0 commit comments

Comments
 (0)