Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
a8c658f
Add OBJ writer in Nabla and update MeshLoaders example
AnastaZIuk Feb 5, 2026
890ba02
Merge master into loaders
AnastaZIuk Feb 5, 2026
100bc71
Update OBJ STL loaders for flag removal
AnastaZIuk Feb 5, 2026
89a2d5f
Add file IO policy and optimize mesh loaders writers
AnastaZIuk Feb 7, 2026
9510dac
Save loader writer optimization baseline
AnastaZIuk Feb 7, 2026
4423ca6
Optimize mesh loader parse and IO paths
AnastaZIuk Feb 8, 2026
d1bd309
Integrate fast float and optimize mesh loader writer perf
AnastaZIuk Feb 8, 2026
c61bc8e
Improve OBJ and PLY parser hot paths
AnastaZIuk Feb 8, 2026
fafb616
Optimize mesh loader writer hot paths
AnastaZIuk Feb 8, 2026
e7c304a
Optimize OBJ writer formatting and STL wholefile read
AnastaZIuk Feb 8, 2026
1f21b75
Optimize mesh loader and writer hot loops
AnastaZIuk Feb 8, 2026
307f601
Optimize loader selection and mesh IO hot paths
AnastaZIuk Feb 8, 2026
335a2cb
Optimize loader hot paths and hashing
AnastaZIuk Feb 9, 2026
f6d8ae6
Optimize mesh loader baseline and hash fallback
AnastaZIuk Feb 10, 2026
9837d7d
Add optional loader hash compute flag and tune parser workers
AnastaZIuk Feb 10, 2026
ac82f69
Optimize loader hot paths
AnastaZIuk Feb 10, 2026
7de3694
Tune STL and PLY worker heuristics
AnastaZIuk Feb 10, 2026
58138ea
Optimize mesh loader hashing and hot paths
AnastaZIuk Feb 10, 2026
765882f
Optimize PLY fast face validation path
AnastaZIuk Feb 10, 2026
2289231
Pipeline PLY index hash and tune STL chunks
AnastaZIuk Feb 10, 2026
a3a0cb8
Use wait notify in PLY STL hash pipeline
AnastaZIuk Feb 10, 2026
73d348d
Stabilize loader runtime tuning heuristics and hybrid mode
AnastaZIuk Feb 11, 2026
4778068
Tune STL runtime worker limits
AnastaZIuk Feb 11, 2026
e8123bc
Refactor interchange IO and geometry hash helpers
AnastaZIuk Feb 11, 2026
7604438
Optimize asset path handling and remove misleading loader timing logs
AnastaZIuk Feb 11, 2026
e452ab3
Update examples submodule for MeshLoaders cleanup
AnastaZIuk Feb 11, 2026
83f15d0
Refine mesh interchange API and loader writer pipeline
AnastaZIuk Feb 12, 2026
22b0d23
Improve mesh interchange paths and optimize PLY parsing
AnastaZIuk Feb 13, 2026
9e858ae
Update examples_tests submodule for meshloaders updates
AnastaZIuk Feb 13, 2026
fbd5601
Unify generic AABB helpers and runtime tuning paths
AnastaZIuk Feb 13, 2026
caafb71
Move generic AABB helpers to utils and simplify STL record writes
AnastaZIuk Feb 13, 2026
858adb7
Clarify geometry hash modes and normalize EOF formatting
AnastaZIuk Feb 13, 2026
50046f6
Update examples_tests submodule for hash test toggle
AnastaZIuk Feb 13, 2026
5575861
Fix converter hash fallback mutation and update examples_tests
AnastaZIuk Feb 13, 2026
80763ec
Merge master into loaders
AnastaZIuk Feb 13, 2026
fbf300c
Update examples_tests submodule for local swapchain transfer-src setup
AnastaZIuk Feb 14, 2026
92b7447
Document runtime policy fields and stabilize Win32 file mapping flags
AnastaZIuk Feb 14, 2026
518ff44
Fix archive fallback and preflight checks for PLY loading
AnastaZIuk Feb 14, 2026
356ab95
Fix OBJ fallback counters and archive path lookup
AnastaZIuk Feb 14, 2026
0678981
Remove PLY file-backed buffer aliasing
AnastaZIuk Feb 14, 2026
2b8a34d
Fix mesh loader normal handling and PLY scalar typing
AnastaZIuk Feb 14, 2026
02d8913
Restore STL color feature using format conversion API
AnastaZIuk Feb 14, 2026
be6d48b
Address PR 1000 review comments
AnastaZIuk Feb 19, 2026
949928d
Merge master into loaders
AnastaZIuk Feb 19, 2026
b32f566
Finalize loader tuning API cleanup
AnastaZIuk Mar 5, 2026
e2c4c4a
Merge master into loaders
AnastaZIuk Mar 5, 2026
20f56c2
Unify geometry hash API and add hcp parity tool
AnastaZIuk Mar 5, 2026
b286a04
Clarify HCP README parity scope
AnastaZIuk Mar 5, 2026
57a8772
Finalize loader and writer cleanup
AnastaZIuk Mar 6, 2026
5b1cd7f
Address remaining review nits
AnastaZIuk Mar 6, 2026
f1a0721
Finish SIMD cleanup in loaders
AnastaZIuk Mar 6, 2026
2ae072a
Loader updates
AnastaZIuk Mar 6, 2026
47bcf00
Use std bit utilities
AnastaZIuk Mar 6, 2026
ec74bd7
Loader flag updates
AnastaZIuk Mar 6, 2026
a567d14
Cache flag updates
AnastaZIuk Mar 6, 2026
41935c1
Unify face normal helpers
AnastaZIuk Mar 6, 2026
da8acca
Update OBJ geometry writing
AnastaZIuk Mar 6, 2026
234afe1
Simplify identity transform checks
AnastaZIuk Mar 6, 2026
c30ac39
Consolidate AABB helpers
AnastaZIuk Mar 6, 2026
16eb8ba
Update polygon geometry aux layouts
AnastaZIuk Mar 7, 2026
79218cf
Deduplicate triangle index visitor
AnastaZIuk Mar 7, 2026
976df29
Move IO helpers into structs
AnastaZIuk Mar 7, 2026
91ecd79
Extract buffer adoption helpers
AnastaZIuk Mar 7, 2026
7f01766
Refine writer and buffer adoption helpers
AnastaZIuk Mar 7, 2026
dc0c5b2
Refine geometry writer helpers
AnastaZIuk Mar 7, 2026
a872152
Refine interchange IO helpers
AnastaZIuk Mar 7, 2026
4a6920e
Rename interchange IO helper
AnastaZIuk Mar 7, 2026
b9dd4fa
Refine loader runtime tuning
AnastaZIuk Mar 7, 2026
1e50ae0
Document interchange helpers
AnastaZIuk Mar 7, 2026
2fc1b1c
Fix AABB helper reuse and HLSL compile
AnastaZIuk Mar 7, 2026
da25e8d
Deduplicate AABB assignment paths
AnastaZIuk Mar 7, 2026
6a7fde1
Inline geometry writer helpers
AnastaZIuk Mar 7, 2026
31a6696
Hide vendor Blake3 from public API
AnastaZIuk Mar 7, 2026
187836b
Clean up OBJ PLY STL code paths
AnastaZIuk Mar 7, 2026
14b3c98
Generalize loader cleanup helpers
AnastaZIuk Mar 7, 2026
ef7c706
Reduce loader and writer duplication
AnastaZIuk Mar 8, 2026
9bbc3d3
Refactor mesh interchange helpers
AnastaZIuk Mar 8, 2026
68cb7e6
Refine mesh interchange cleanup
AnastaZIuk Mar 8, 2026
690d799
Reduce mesh loader writer duplication
AnastaZIuk Mar 8, 2026
dc7282e
Reduce remaining loader duplication
AnastaZIuk Mar 8, 2026
60e9b5c
Trim parser boilerplate
AnastaZIuk Mar 8, 2026
e5fc4ac
Reduce mesh writer parser boilerplate
AnastaZIuk Mar 8, 2026
4eb9d16
Trim interchange helper boilerplate
AnastaZIuk Mar 8, 2026
bd6f96c
Reduce loader writer boilerplate
AnastaZIuk Mar 8, 2026
0a4316b
Compact interchange whitespace
AnastaZIuk Mar 8, 2026
b1fe5fc
Tighten helper declarations
AnastaZIuk Mar 8, 2026
503a951
Restore comments and trim boilerplate
AnastaZIuk Mar 8, 2026
6c01eaf
Tighten shared interchange helpers
AnastaZIuk Mar 8, 2026
e319b75
Restore helper comments and spacing
AnastaZIuk Mar 8, 2026
e4278de
Improve interchange comment formatting
AnastaZIuk Mar 8, 2026
943d4c4
Tighten added interchange file layout
AnastaZIuk Mar 8, 2026
64560b4
Use relative fast_float submodule URL
AnastaZIuk Mar 8, 2026
a54d4af
Restore inherited comment layout
AnastaZIuk Mar 8, 2026
00fa8bb
Restore mesh loader benchmark performance
AnastaZIuk Mar 8, 2026
618681d
Share OBJ perf parsing helpers
AnastaZIuk Mar 8, 2026
dce1c4c
Refine geometry interchange helpers
AnastaZIuk Mar 9, 2026
bd84fe3
Commonize loader view helpers
AnastaZIuk Mar 9, 2026
0b82655
Clarify STL writer color decoding
AnastaZIuk Mar 9, 2026
833f144
Pipeline chunked interchange IO
AnastaZIuk Mar 9, 2026
9bccfea
Tighten metadata access and document float fast path
AnastaZIuk Mar 9, 2026
4225853
Clarify shared decimal fast path
AnastaZIuk Mar 9, 2026
c4733d0
Update examples tests pointer
AnastaZIuk Mar 9, 2026
e472dd2
Merge remote-tracking branch 'origin/master' into loaders
AnastaZIuk Mar 9, 2026
b83cfc5
Refine smooth normal accumulation
AnastaZIuk Mar 10, 2026
c4e9665
Document smooth normal accumulation
AnastaZIuk Mar 10, 2026
a32ff11
Load OBJ assets as scenes
AnastaZIuk Mar 10, 2026
f19123a
Trim OBJ scene loader docs
AnastaZIuk Mar 10, 2026
46b9b0c
Update examples_tests loaders pointer
AnastaZIuk Mar 10, 2026
c0d42ef
Advance examples_tests loaders pointer
AnastaZIuk Mar 10, 2026
d8ad511
Advance examples_tests loaders pointer
AnastaZIuk Mar 10, 2026
82905e7
Advance examples_tests loaders pointer
AnastaZIuk Mar 10, 2026
93eddc4
Advance examples_tests loaders pointer
AnastaZIuk Mar 10, 2026
8c1b8ae
Advance examples_tests loaders pointer
AnastaZIuk Mar 10, 2026
e9f19c8
Add growable memory file utility
AnastaZIuk Mar 11, 2026
ece07fa
Advance examples_tests loaders pointer
AnastaZIuk Mar 11, 2026
0a1308b
Expose CPU system info
AnastaZIuk Mar 11, 2026
a2c2639
Track examples git metadata
AnastaZIuk Mar 11, 2026
2fc8438
Move examples git tracking to examples project
AnastaZIuk Mar 11, 2026
ea6b9da
Update examples git tracking hooks
AnastaZIuk Mar 11, 2026
cc3952a
Adopt scoped git metadata targets
AnastaZIuk Mar 11, 2026
f2a9685
Enable long paths for perf reference updates
AnastaZIuk Mar 11, 2026
3e5ac16
Support long path perf reference updates
AnastaZIuk Mar 11, 2026
3a80686
Deduplicate Win32 long path helper
AnastaZIuk Mar 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,4 @@ tools/nsc/bin/*
*/__pycache__/*
__pycache__/*
*.pyc

tmp/*
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -129,3 +129,6 @@
[submodule "3rdparty/Vulkan-Tools"]
path = 3rdparty/Vulkan-Tools
url = git@github.com:Devsh-Graphics-Programming/Vulkan-Tools.git
[submodule "3rdparty/fast_float"]
path = 3rdparty/fast_float
url = ../fast_float.git
37 changes: 27 additions & 10 deletions 3rdparty/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -282,12 +282,31 @@ target_compile_definitions(spirv_cross PUBLIC SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIO
# note that checking if a repository is dirty may cost build time (especially a lot if like us you have a lot of submodules) - by default we run with all checks but if you want to increase build time iterations I recommend to exclude this check
option(GIT_EXCLUDE_IS_DIRTY "Exclude IS_DIRTY from git tracking checks, will increase build time iterations at the expense of the meta information loss" OFF)
add_subdirectory(git-version-tracking EXCLUDE_FROM_ALL)
NBL_ADD_GIT_TRACKING_META_LIBRARY(nabla "${NBL_ROOT_PATH}")
NBL_ADD_GIT_TRACKING_META_LIBRARY(dxc "${CMAKE_CURRENT_SOURCE_DIR}/dxc/dxc")
nbl_install_file("${CMAKE_CURRENT_BINARY_DIR}/git-version-tracking/nabla_git_info.json")
nbl_install_file("${CMAKE_CURRENT_BINARY_DIR}/git-version-tracking/dxc_git_info.json")

NBL_GENERATE_GIT_TRACKING_META()
NBL_CONFIGURE_GIT_TRACKING_META_RUNTIME(
TARGET gtml_core
NAMESPACE gtml
IGITINFO_HEADER_PATH nbl/gtml/IGitInfo.h
JSON_FORMATTER_HEADER_PATH nbl/gtml/SJsonFormatter.h
)
NBL_ADD_GIT_TRACKING_META_LIBRARY(
TARGET gtml
NAMESPACE nbl::gtml
HEADER_PATH nbl/git/info.h
REPOS
nabla "${NBL_ROOT_PATH}"
dxc "${CMAKE_CURRENT_SOURCE_DIR}/dxc/dxc"
)
NBL_GET_GIT_TRACKING_META_RUNTIME_OUTPUTS(
IGITINFO_HEADER_OUTPUT_VAR _NBL_GTML_IGITINFO_HEADER
JSON_FORMATTER_HEADER_OUTPUT_VAR _NBL_GTML_JSON_FORMATTER_HEADER
)
NBL_GET_GIT_TRACKING_META_OUTPUTS(TARGET gtml HEADER_OUTPUT_VAR _NBL_GTML_HEADER JSON_OUTPUTS_VAR _NBL_GTML_JSONS)
nbl_install_file_spec("${_NBL_GTML_IGITINFO_HEADER}" "nbl/gtml")
nbl_install_file_spec("${_NBL_GTML_JSON_FORMATTER_HEADER}" "nbl/gtml")
nbl_install_file_spec("${_NBL_GTML_HEADER}" "nbl/git")
foreach(_NBL_GTML_JSON IN LISTS _NBL_GTML_JSONS)
nbl_install_file("${_NBL_GTML_JSON}")
endforeach()

# NGFX
include(ngfx/ngfx.cmake)
Expand Down Expand Up @@ -456,6 +475,8 @@ set(NBL_3RDPARTY_TARGETS
lz4
aesGladman
spirv_cross
gtml_core
gtml
png_static
zlibstatic
shaderc_util
Expand Down Expand Up @@ -528,14 +549,10 @@ nbl_install_dir(glm/glm)
nbl_install_file_spec(${CMAKE_CURRENT_BINARY_DIR}/imath/config/ImathConfig.h imath)
nbl_install_dir(imath/src/Imath)

nbl_install_file(blake/c/blake3.h)

nbl_install_dir(boost/superproject/libs/preprocessor/include/boost)

nbl_install_file_spec(renderdoc/renderdoc_app.h renderdoc)

nbl_install_file(${CMAKE_CURRENT_BINARY_DIR}/git-version-tracking/git_info.h)

# parent scope exports, must be at the end of the file
set(_NBL_3RDPARTY_TARGETS_
${NBL_3RDPARTY_TARGETS}
Expand Down
1 change: 1 addition & 0 deletions 3rdparty/fast_float
Submodule fast_float added at 221a49
6 changes: 3 additions & 3 deletions include/nabla.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,11 @@
#include "SColor.h"

// meta info
#include "git_info.h"
#include "nbl/git/info.h"

namespace nbl {
const NBL_API2 gtml::GitInfo& getGitInfo(gtml::E_GIT_REPO_META repo);
const NBL_API2 ::gtml::IGitInfo& getGitInfo(gtml::E_GIT_REPO_META repo);
}


#endif // __NABLA_H_INCLUDED__
#endif // __NABLA_H_INCLUDED__
4 changes: 2 additions & 2 deletions include/nbl/application_templates/MonoDeviceApplication.hpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2023-2023 - DevSH Graphics Programming Sp. z O.O.
// Copyright (C) 2018-2025 - DevSH Graphics Programming Sp. z O.O.
// This file is part of the "Nabla Engine".
// For conditions of distribution and use, see copyright notice in nabla.h
#ifndef _NBL_APPLICATION_TEMPLATES_MONO_DEVICE_APPLICATION_HPP_INCLUDED_
Expand Down Expand Up @@ -280,4 +280,4 @@ class MonoDeviceApplication : public virtual MonoSystemMonoLoggerApplication
};

}
#endif
#endif
51 changes: 43 additions & 8 deletions include/nbl/asset/IAssetManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#define _NBL_ASSET_I_ASSET_MANAGER_H_INCLUDED_

#include <array>
#include <optional>
#include <ostream>

#include "nbl/core/declarations.h"
Expand Down Expand Up @@ -51,6 +52,12 @@ class NBL_API2 IAssetManager : public core::IReferenceCounted
friend std::function<void(SAssetBundle&)> makeAssetDisposeFunc(const IAssetManager* const _mgr);

public:
struct SWriterFlagInfo
{
writer_flags_t supported = EWF_NONE;
writer_flags_t forced = EWF_NONE;
};

#ifdef USE_MAPS_FOR_PATH_BASED_CACHE
using AssetCacheType = core::CConcurrentMultiObjectCache<std::string, SAssetBundle, std::multimap>;
#else
Expand Down Expand Up @@ -180,19 +187,31 @@ class NBL_API2 IAssetManager : public core::IReferenceCounted
SAssetBundle getAssetInHierarchy_impl(const std::string& _filePath, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
{
IAssetLoader::SAssetLoadContext ctx(_params, nullptr);
system::ISystem::future_t<core::smart_refctd_ptr<system::IFile>> future;
const auto tryLoadAssetFromPath = [&](const system::path& path)->SAssetBundle
{
m_system->createFile(future, path, static_cast<system::IFile::E_CREATE_FLAGS>(system::IFile::ECF_READ | system::IFile::ECF_MAPPABLE));
if (auto file=future.acquire())
return getAssetInHierarchy_impl(file->get(), path.string(), ctx.params, _hierarchyLevel, _override);
m_system->createFile(future, path, system::IFile::ECF_READ);
if (auto file=future.acquire())
return getAssetInHierarchy_impl(file->get(), path.string(), ctx.params, _hierarchyLevel, _override);
return SAssetBundle(0);
};

system::path filePath = _filePath;
_override->getLoadFilename(filePath, m_system.get(), ctx, _hierarchyLevel);
if (!m_system->exists(filePath,system::IFile::ECF_READ))
if (auto bundle=tryLoadAssetFromPath(filePath); !bundle.getContents().empty())
return bundle;

auto fallbackPath = _params.workingDirectory / filePath;
if (fallbackPath != filePath)
{
filePath = _params.workingDirectory/filePath;
filePath = std::move(fallbackPath);
_override->getLoadFilename(filePath, m_system.get(), ctx, _hierarchyLevel);
if (auto bundle=tryLoadAssetFromPath(filePath); !bundle.getContents().empty())
return bundle;
}

system::ISystem::future_t<core::smart_refctd_ptr<system::IFile>> future;
m_system->createFile(future, filePath, system::IFile::ECF_READ);
if (auto file=future.acquire())
return getAssetInHierarchy_impl(file->get(), filePath.string(), ctx.params, _hierarchyLevel, _override);
return SAssetBundle(0);
}

Expand Down Expand Up @@ -350,8 +369,12 @@ class NBL_API2 IAssetManager : public core::IReferenceCounted
if (!_override)
_override = &defOverride;

system::path filename = _filename;
if (filename.is_relative() && !_params.workingDirectory.empty())
filename = _params.workingDirectory / filename;

system::ISystem::future_t<core::smart_refctd_ptr<system::IFile>> future;
m_system->createFile(future, (_params.workingDirectory.generic_string()+_filename).c_str(), system::IFile::ECF_WRITE);
m_system->createFile(future, std::move(filename), system::IFile::ECF_WRITE);
if (auto file=future.acquire())
return writeAsset(file->get(), _params, _override);
return false;
Expand Down Expand Up @@ -381,6 +404,18 @@ class NBL_API2 IAssetManager : public core::IReferenceCounted
return writeAsset(_file, _params, nullptr);
}

inline std::optional<SWriterFlagInfo> getAssetWriterFlagInfo(const IAsset::E_TYPE assetType, const std::string_view extension) const
{
const auto capableWritersRng = m_writers.perTypeAndFileExt.findRange({assetType, std::string(extension)});
if (capableWritersRng.empty())
return std::nullopt;
auto* const writer = capableWritersRng.begin()->second;
return SWriterFlagInfo{
.supported = writer->getSupportedFlags(),
.forced = writer->getForcedFlags()
};
}

// Asset Loaders [FOLLOWING ARE NOT THREAD SAFE]
uint32_t getAssetLoaderCount() { return static_cast<uint32_t>(m_loaders.vector.size()); }

Expand Down
17 changes: 8 additions & 9 deletions include/nbl/asset/ICPUBuffer.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2018-2020 - DevSH Graphics Programming Sp. z O.O.
// Copyright (C) 2018-2025 - DevSH Graphics Programming Sp. z O.O.
// This file is part of the "Nabla Engine".
// For conditions of distribution and use, see copyright notice in nabla.h
#ifndef _NBL_ASSET_I_CPU_BUFFER_H_INCLUDED_
Expand Down Expand Up @@ -76,13 +76,12 @@ class ICPUBuffer final : public asset::IBuffer, public IPreHashed
constexpr static inline auto AssetType = ET_BUFFER;
inline IAsset::E_TYPE getAssetType() const override final { return AssetType; }

inline core::blake3_hash_t computeContentHash() const override
{
core::blake3_hasher hasher;
if (m_data)
hasher.update(m_data, m_creationParams.size);
return static_cast<core::blake3_hash_t>(hasher);
}
inline core::blake3_hash_t computeContentHash() const override
{
if (!m_data)
return static_cast<core::blake3_hash_t>(core::blake3_hasher{});
return core::blake3_hash_buffer(m_data, m_creationParams.size);
}

inline bool missingContent() const override { return !m_data; }

Expand Down Expand Up @@ -149,4 +148,4 @@ class ICPUBuffer final : public asset::IBuffer, public IPreHashed

} // end namespace nbl::asset

#endif
#endif
18 changes: 16 additions & 2 deletions include/nbl/asset/ICPUPolygonGeometry.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "nbl/asset/IAsset.h"
#include "nbl/asset/ICPUBuffer.h"
#include "nbl/asset/IPolygonGeometry.h"
#include "nbl/builtin/hlsl/shapes/AABBAccumulator.hlsl"


namespace nbl::asset
Expand Down Expand Up @@ -112,7 +113,20 @@ class NBL_API2 ICPUPolygonGeometry final : public IPolygonGeometry<ICPUBuffer>
return false;
}
template<typename Scalar>
inline bool setAABB(const hlsl::shapes::AABB<3,Scalar>& aabb) {return visitAABB([&aabb](auto&& ref)->void{ref=aabb;});}
inline bool setAABB(const hlsl::shapes::AABB<3,Scalar>& aabb)
{
bool assigned = false;
const bool visited = visitAABB([&aabb, &assigned](auto&& ref)->void
{
assigned = hlsl::shapes::util::assignAABB(ref, aabb);
});
return visited && assigned;
}
template<typename Scalar>
inline bool applyAABB(const hlsl::shapes::AABB<3, Scalar>& aabb)
{
return setAABB(aabb);
}

//
inline bool setJointCount(const uint32_t count)
Expand Down Expand Up @@ -194,4 +208,4 @@ class NBL_API2 ICPUPolygonGeometry final : public IPolygonGeometry<ICPUBuffer>
};

}
#endif
#endif
49 changes: 49 additions & 0 deletions include/nbl/asset/SBufferAdoption.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Copyright (C) 2018-2025 - DevSH Graphics Programming Sp. z O.O.
// This file is part of the "Nabla Engine".
// For conditions of distribution and use, see copyright notice in nabla.h
#ifndef _NBL_ASSET_S_BUFFER_ADOPTION_H_INCLUDED_
#define _NBL_ASSET_S_BUFFER_ADOPTION_H_INCLUDED_
#include <concepts>
#include <ranges>
#include <type_traits>
#include <utility>
#include "nbl/asset/ICPUBuffer.h"
namespace nbl::asset
{
namespace impl
{
// Owns contiguous storage that can be adopted by a CPU buffer. Views like std::span are rejected.
template<typename Storage>
concept AdoptedBufferStorage =
std::ranges::contiguous_range<std::remove_reference_t<Storage>> &&
std::ranges::sized_range<std::remove_reference_t<Storage>> &&
(!std::ranges::view<std::remove_cvref_t<Storage>>) &&
requires(std::remove_reference_t<Storage>& storage)
{
typename std::ranges::range_value_t<std::remove_reference_t<Storage>>;
{ std::ranges::data(storage) } -> std::same_as<std::ranges::range_value_t<std::remove_reference_t<Storage>>*>;
};
}
// Generic CPU-buffer adoption helper for owning contiguous storage such as std::vector or core::vector.
class SBufferAdoption
{
public:
template<impl::AdoptedBufferStorage Storage>
static inline core::smart_refctd_ptr<ICPUBuffer> create(Storage&& data)
{
using storage_t = std::remove_cvref_t<Storage>;
using value_t = std::ranges::range_value_t<storage_t>;

if (std::ranges::empty(data))
return nullptr;

auto backer = core::make_smart_refctd_ptr<core::adoption_memory_resource<storage_t>>(std::forward<Storage>(data));
auto& storage = backer->getBacker();
const size_t byteCount = std::ranges::size(storage) * sizeof(value_t);
return ICPUBuffer::create(
{ { byteCount }, std::ranges::data(storage), core::smart_refctd_ptr<core::refctd_memory_resource>(std::move(backer)), alignof(value_t) },
core::adopt_memory);
}
};
}
#endif
Loading
Loading