Skip to content

Commit 533c152

Browse files
committed
allow overriding asset schemes
1 parent 2869d76 commit 533c152

File tree

3 files changed

+26
-18
lines changed

3 files changed

+26
-18
lines changed

sources/include/cage-core/assetsManager.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ namespace cage
1414
template<uint32 Scheme, class T>
1515
void defineScheme(const AssetsScheme &value)
1616
{
17-
defineScheme_(detail::typeHash<T>(), Scheme, value);
17+
defineScheme_(detail::typeHash<T>(), Scheme, value, false);
18+
}
19+
template<uint32 Scheme, class T>
20+
void defineSchemeOverride(const AssetsScheme &value)
21+
{
22+
defineScheme_(detail::typeHash<T>(), Scheme, value, true);
1823
}
1924

2025
// begin thread-safe methods
@@ -62,7 +67,7 @@ namespace cage
6267
EventDispatcher<bool(uint32 requestId, String &foundName, Holder<File> &foundFile)> findAsset; // this event is called from loading threads
6368

6469
private:
65-
void defineScheme_(uint32 typeHash, uint32 scheme, const AssetsScheme &value);
70+
void defineScheme_(uint32 typeHash, uint32 scheme, const AssetsScheme &value, bool allowOverride);
6671
void load_(uint32 scheme, uint32 assetId, const String &textId, Holder<void> &&value);
6772
void load_(uint32 scheme, uint32 assetId, const String &textId, const AssetsScheme &customScheme, Holder<void> &&customData);
6873
Holder<void> get_(uint32 scheme, uint32 assetId) const;

sources/libcore/assets/assetsManager.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -700,14 +700,17 @@ namespace cage
700700
return impl->workingCounter == 0 && impl->existsCounter == 0;
701701
}
702702

703-
void AssetsManager::defineScheme_(uint32 typeHash, uint32 scheme, const AssetsScheme &value)
703+
void AssetsManager::defineScheme_(uint32 typeHash, uint32 scheme, const AssetsScheme &value, bool allowOverride)
704704
{
705705
AssetsManagerImpl *impl = (AssetsManagerImpl *)this;
706706
CAGE_ASSERT(typeHash != m);
707707
CAGE_ASSERT(scheme < impl->schemes.size());
708708
CAGE_ASSERT(value.typeHash == typeHash);
709709
CAGE_ASSERT(value.threadIndex == m || value.threadIndex < impl->customProcessingQueues.size());
710-
CAGE_ASSERT(impl->schemes[scheme].typeHash == m); // the scheme was not defined previously
710+
if (!allowOverride)
711+
{
712+
CAGE_ASSERT(impl->schemes[scheme].typeHash == m); // the scheme was not defined previously
713+
}
711714
impl->schemes[scheme] = value;
712715
}
713716

sources/libengine/assets/model.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace cage
1212
{
1313
void processLoad(AssetContext *context)
1414
{
15-
Holder<Model> msh = newModel();
15+
Holder<Model> model = newModel();
1616

1717
Deserializer des(context->originalData);
1818
ModelHeader data;
@@ -22,31 +22,31 @@ namespace cage
2222
mat.resize(data.materialSize);
2323
des.read(mat);
2424

25-
Holder<Mesh> poly = newMesh();
26-
poly->importBuffer(des.read(des.available()));
25+
Holder<Mesh> mesh = newMesh();
26+
mesh->importBuffer(des.read(des.available()));
2727

28-
msh->importMesh(+poly, mat);
29-
msh->setBoundingBox(data.box);
28+
model->importMesh(+mesh, mat);
29+
model->setBoundingBox(data.box);
3030

31-
msh->importTransform = data.importTransform;
31+
model->importTransform = data.importTransform;
3232
for (int i = 0; i < MaxTexturesCountPerMaterial; i++)
33-
msh->textureNames[i] = data.textureNames[i];
34-
msh->shaderName = data.shaderName;
35-
msh->flags = data.renderFlags;
36-
msh->layer = data.renderLayer;
37-
msh->bones = data.skeletonBones;
33+
model->textureNames[i] = data.textureNames[i];
34+
model->shaderName = data.shaderName;
35+
model->flags = data.renderFlags;
36+
model->layer = data.renderLayer;
37+
model->bones = data.skeletonBones;
3838

39-
msh->setDebugName(context->textId); // last command to apply it to all subresources
39+
model->setDebugName(context->textId); // last command to apply it to all subresources
4040

41-
context->assetHolder = std::move(msh).cast<void>();
41+
context->assetHolder = std::move(model).cast<void>();
4242
}
4343
}
4444

4545
AssetsScheme genAssetSchemeModel(uint32 threadIndex)
4646
{
4747
AssetsScheme s;
4848
s.threadIndex = threadIndex;
49-
s.load.bind<&processLoad>();
49+
s.load.bind<processLoad>();
5050
s.typeHash = detail::typeHash<Model>();
5151
return s;
5252
}

0 commit comments

Comments
 (0)