Skip to content

Commit d5e0587

Browse files
fix some more issues, write down an idea
1 parent 6930190 commit d5e0587

File tree

3 files changed

+41
-6
lines changed

3 files changed

+41
-6
lines changed

include/nbl/asset/ISkeleton.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,14 @@ namespace asset
7979
}
8080

8181
// map must contain one `const char*` per bone
82-
inline void setJointNames(const decltype(m_nameToJointID)& nameToJointIDMap)
82+
template<class Comparator>
83+
inline void setJointNames(const core::map<const char*,joint_id_t,Comparator>& nameToJointIDMap)
8384
{
8485
clearNames();
8586

8687
// size the pool
8788
for (const auto& mapping : nameToJointIDMap)
88-
inName(mapping.first);
89+
reserveName(mapping.first);
8990

9091
// useless names
9192
if (m_stringPoolSize==0ull)
@@ -106,7 +107,7 @@ namespace asset
106107

107108
// size the pool
108109
for (auto it=begin; it!=end; it++)
109-
inName(*it);
110+
reserveName(*it);
110111

111112
// useless names
112113
if (m_stringPoolSize==0ull)
@@ -141,7 +142,7 @@ namespace asset
141142
if (nameLen)
142143
m_stringPoolSize += nameLen+1ull;
143144
}
144-
inline const char* insertName(const char* outName, const char* inName, joint_id_t jointID)
145+
inline char* insertName(char* outName, const char* inName, joint_id_t jointID)
145146
{
146147
const char* name = outName;
147148
while (*inName) {*(outName++) = *(inName++);}

include/nbl/video/IGPUSkeleton.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ class IGPUSkeleton final : public asset::ISkeleton<IGPUBuffer>
1818
using base_t = asset::ISkeleton<IGPUBuffer>;
1919

2020
public:
21-
inline IGPUSkeleton(asset::SBufferBinding<IGPUBuffer>&& _parentJointIDsBinding, asset::SBufferBinding<IGPUBuffer>&& _inverseBindPosesBinding, const decltype(m_nameToJointID)& nameToJointIDMap) :
21+
template<class Comparator>
22+
inline IGPUSkeleton(asset::SBufferBinding<IGPUBuffer>&& _parentJointIDsBinding, asset::SBufferBinding<IGPUBuffer>&& _inverseBindPosesBinding, const core::map<const char*,joint_id_t,Comparator>& nameToJointIDMap) :
2223
base_t(std::move(_parentJointIDsBinding),std::move(_inverseBindPosesBinding),nameToJointIDMap.size())
2324
{
24-
base_t::setJointNames(nameToJointIDMap);
25+
base_t::setJointNames<Comparator>(nameToJointIDMap);
2526
}
2627

2728
template<typename NameIterator>

source/Nabla/IDriver.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ template created_gpu_object_array<asset::ICPUDescriptorSetLayout> IDriver::getGP
112112
template created_gpu_object_array<asset::ICPUSampler> IDriver::getGPUObjectsFromAssets<asset::ICPUSampler>(const asset::ICPUSampler* const* const, const asset::ICPUSampler* const* const, IGPUObjectFromAssetConverter* _converter);
113113
template created_gpu_object_array<asset::ICPUDescriptorSet> IDriver::getGPUObjectsFromAssets<asset::ICPUDescriptorSet>(const asset::ICPUDescriptorSet* const* const, const asset::ICPUDescriptorSet* const* const, IGPUObjectFromAssetConverter* _converter);
114114

115+
115116
template<typename AssetType>
116117
created_gpu_object_array<AssetType> IDriver::getGPUObjectsFromAssets(const core::smart_refctd_ptr<AssetType>* _begin, const core::smart_refctd_ptr<AssetType>* _end, IGPUObjectFromAssetConverter* _converter)
117118
{
@@ -136,6 +137,38 @@ template created_gpu_object_array<asset::ICPUDescriptorSetLayout> IDriver::getGP
136137
template created_gpu_object_array<asset::ICPUSampler> IDriver::getGPUObjectsFromAssets<asset::ICPUSampler>(const core::smart_refctd_ptr<asset::ICPUSampler>*, const core::smart_refctd_ptr<asset::ICPUSampler>*, IGPUObjectFromAssetConverter* _converter);
137138
template created_gpu_object_array<asset::ICPUDescriptorSet> IDriver::getGPUObjectsFromAssets<asset::ICPUDescriptorSet>(const core::smart_refctd_ptr<asset::ICPUDescriptorSet>*, const core::smart_refctd_ptr<asset::ICPUDescriptorSet>*, IGPUObjectFromAssetConverter* _converter);
138139

140+
141+
// TODO: would be nice if something like this worked... eh might have to resort to a Macro
142+
#if 0
143+
template<typename AssetType>
144+
struct SingleFunctionInstantiator
145+
{
146+
protected:
147+
static auto instantiate(IDriver* driver)
148+
{
149+
core::smart_refctd_ptr<AssetType> smartptr;
150+
151+
created_gpu_object_array<AssetType> retval = driver->getGPUObjectsFromAssets<AssetType>(core::SRange<const core::smart_refctd_ptr<asset::IAsset>>(nullptr, nullptr), nullptr);
152+
retval = driver->getGPUObjectsFromAssets<AssetType>(&smartptr.get(), &smartptr.get(), nullptr);
153+
retval = driver->getGPUObjectsFromAssets<AssetType>(&smartptr, &smartptr, nullptr);
154+
return retval;
155+
}
156+
};
157+
template<typename... AssetTypes>
158+
struct MultiFunctionInstantiator : public SingleFunctionInstantiator<AssetTypes>...
159+
{
160+
};
161+
162+
template MultiFunctionInstantiator<asset::ICPUBuffer,
163+
asset::ICPUShader, asset::ICPUImage, asset::ICPUSkeleton,
164+
asset::ICPUSpecializedShader, asset::ICPUImageView, asset::ICPUSampler,
165+
asset::ICPUDescriptorSetLayout,
166+
asset::ICPUDescriptorSet, asset::ICPUPipelineLayout,
167+
asset::ICPUComputePipeline, asset::ICPURenderpassIndependentPipeline,
168+
asset::ICPUMeshBuffer,
169+
asset::ICPUMesh
170+
>;
171+
#endif
139172
}
140173
}
141174

0 commit comments

Comments
 (0)