Skip to content

Commit c82f820

Browse files
author
devsh
committed
make IGeometryLoader compile and compute hashes and ranges automagically
1 parent 69fab28 commit c82f820

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

include/nbl/asset/interchange/IGeometryLoader.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "nbl/asset/ICPUPolygonGeometry.h"
1111
#include "nbl/asset/interchange/IAssetLoader.h"
1212
#include "nbl/asset/interchange/IImageAssetHandlerBase.h"
13+
#include "nbl/asset/utils/CGeometryManipulator.h"
1314

1415

1516
namespace nbl::asset
@@ -30,18 +31,25 @@ class IGeometryLoader : public IAssetLoader
3031
)
3132
{
3233
const auto stride = getTexelOrBlockBytesize(format);
34+
core::smart_refctd_ptr<ICPUBuffer> buffer;
3335
if constexpr (AdoptMemory)
3436
buffer = ICPUBuffer::create({{stride*elementCount},const_cast<void*>(data),std::move(memoryResource),alignment},core::adopt_memory);
3537
else
3638
buffer = ICPUBuffer::create({{stride*elementCount},const_cast<void*>(data),std::move(memoryResource),alignment});
37-
return {
39+
IGeometry<ICPUBuffer>::SDataView retval = {
3840
.composed = {
3941
.stride = stride,
4042
.format = format,
4143
.rangeFormat = IGeometryBase::getMatchingAABBFormat(format)
4244
},
4345
.src = {.offset=0,.size=buffer->getSize(),.buffer=std::move(buffer)}
4446
};
47+
if (data)
48+
{
49+
CGeometryManipulator::recomputeContentHash(retval);
50+
CGeometryManipulator::computeRange(retval);
51+
}
52+
return retval;
4553
}
4654
// creates a View from a mapped file
4755
class CFileMemoryResource final : public core::refctd_memory_resource
@@ -77,7 +85,11 @@ class IGeometryLoader : public IAssetLoader
7785
system::IFile::success_t success;
7886
file->read(success,reinterpret_cast<uint8_t*>(view.src.buffer->getPointer())+view.src.offset,offsetInFile,view.src.actualSize());
7987
if (success)
88+
{
89+
CGeometryManipulator::recomputeContentHash(view);
90+
CGeometryManipulator::computeRange(view);
8091
return view;
92+
}
8193
}
8294
return {};
8395
}

include/nbl/core/alloc/refctd_memory_resource.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class adoption_memory_resource final : public refctd_memory_resource
5252
inline void* allocate(std::size_t bytes, std::size_t alignment) override
5353
{
5454
assert(false); // should never be called
55+
return nullptr;
5556
}
5657
inline void deallocate(void* p, std::size_t bytes, std::size_t alignment) override {} // noop
5758

0 commit comments

Comments
 (0)