Skip to content

Commit ee0595b

Browse files
committed
asset manager validates asset ids
1 parent 24ace38 commit ee0595b

File tree

4 files changed

+26
-17
lines changed

4 files changed

+26
-17
lines changed

sources/libcore/assets/assetsManager.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,7 @@ namespace cage
524524

525525
void AssetsManager::load(uint32 assetId)
526526
{
527+
CAGE_ASSERT(assetId != 0 && assetId != m);
527528
AssetsManagerImpl *impl = (AssetsManagerImpl *)this;
528529
ScopeLock lock(impl->privateMutex);
529530
auto &c = impl->privateIndex[assetId];
@@ -538,6 +539,7 @@ namespace cage
538539

539540
void AssetsManager::unload(uint32 assetId)
540541
{
542+
CAGE_ASSERT(assetId != 0 && assetId != m);
541543
AssetsManagerImpl *impl = (AssetsManagerImpl *)this;
542544
ScopeLock lock(impl->privateMutex);
543545
CAGE_ASSERT(impl->privateIndex.count(assetId) == 1);
@@ -555,6 +557,7 @@ namespace cage
555557

556558
void AssetsManager::reload(uint32 assetId)
557559
{
560+
CAGE_ASSERT(assetId != 0 && assetId != m);
558561
AssetsManagerImpl *impl = (AssetsManagerImpl *)this;
559562
ScopeLock lock(impl->privateMutex);
560563
auto it = impl->privateIndex.find(assetId);
@@ -698,6 +701,7 @@ namespace cage
698701

699702
void AssetsManager::load_(uint32 scheme, uint32 assetId, const String &textId, Holder<void> &&value)
700703
{
704+
CAGE_ASSERT(assetId != 0 && assetId != m);
701705
AssetsManagerImpl *impl = (AssetsManagerImpl *)this;
702706
CAGE_ASSERT(scheme < impl->schemes.size());
703707
ScopeLock lock(impl->privateMutex);
@@ -711,6 +715,7 @@ namespace cage
711715

712716
void AssetsManager::load_(uint32 scheme, uint32 assetId, const String &textId, const AssetsScheme &customScheme, Holder<void> &&customData)
713717
{
718+
CAGE_ASSERT(assetId != 0 && assetId != m);
714719
AssetsManagerImpl *impl = (AssetsManagerImpl *)this;
715720
CAGE_ASSERT(scheme < impl->schemes.size());
716721
CAGE_ASSERT(customScheme.threadIndex == m);
@@ -737,6 +742,7 @@ namespace cage
737742

738743
Holder<void> AssetsManager::get_(uint32 scheme, uint32 assetId) const
739744
{
745+
CAGE_ASSERT(assetId != 0 && assetId != m);
740746
const AssetsManagerImpl *impl = (const AssetsManagerImpl *)this;
741747
const auto &schemes = impl->schemes;
742748
const auto &publicIndex = impl->publicIndex;

sources/libcore/assets/assetsOnDemand.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ namespace cage
100100

101101
Holder<void> AssetsOnDemand::get_(uint32 scheme, uint32 assetId, bool autoLoad)
102102
{
103+
CAGE_ASSERT(assetId != 0 && assetId != m);
103104
AssetOnDemandImpl *impl = (AssetOnDemandImpl *)this;
104105
auto r = impl->assets->get_(scheme, assetId);
105106
impl->update(!!r, assetId, autoLoad);

sources/libengine/graphics/renderPipeline.cpp

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -453,27 +453,28 @@ namespace cage
453453
for (uint32 i = 0; i < MaxTexturesCountPerMaterial; i++)
454454
{
455455
const uint32 n = sh.mesh->textureNames[i];
456+
if (n == 0)
457+
continue;
456458
textures[i] = assets->get<AssetSchemeIndexTexture, Texture>(n);
457-
if (textures[i])
459+
if (!textures[i])
460+
continue;
461+
if (i < 3)
458462
{
459-
if (i < 3)
463+
switch (textures[i]->target())
460464
{
461-
switch (textures[i]->target())
462-
{
463-
case GL_TEXTURE_2D_ARRAY:
464-
renderQueue->bind(textures[i], CAGE_SHADER_TEXTURE_ALBEDO_ARRAY + i);
465-
break;
466-
case GL_TEXTURE_CUBE_MAP:
467-
renderQueue->bind(textures[i], CAGE_SHADER_TEXTURE_ALBEDO_CUBE + i);
468-
break;
469-
default:
470-
renderQueue->bind(textures[i], CAGE_SHADER_TEXTURE_ALBEDO + i);
471-
break;
472-
}
465+
case GL_TEXTURE_2D_ARRAY:
466+
renderQueue->bind(textures[i], CAGE_SHADER_TEXTURE_ALBEDO_ARRAY + i);
467+
break;
468+
case GL_TEXTURE_CUBE_MAP:
469+
renderQueue->bind(textures[i], CAGE_SHADER_TEXTURE_ALBEDO_CUBE + i);
470+
break;
471+
default:
472+
renderQueue->bind(textures[i], CAGE_SHADER_TEXTURE_ALBEDO + i);
473+
break;
473474
}
474-
else
475-
renderQueue->bind(textures[i], CAGE_SHADER_TEXTURE_CUSTOM);
476475
}
476+
else
477+
renderQueue->bind(textures[i], CAGE_SHADER_TEXTURE_CUSTOM);
477478
}
478479
updateShaderRoutinesForTextures(textures, uniOptions);
479480

sources/libengine/gui/items.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,8 @@ namespace cage
371371
void ImageItem::assign(const GuiImageComponent &value)
372372
{
373373
image = value;
374-
texture = hierarchy->impl->assetOnDemand->get<AssetSchemeIndexTexture, Texture>(value.textureName);
374+
if (value.textureName)
375+
texture = hierarchy->impl->assetOnDemand->get<AssetSchemeIndexTexture, Texture>(value.textureName);
375376
}
376377

377378
void ImageItem::apply(const GuiImageFormatComponent &f)

0 commit comments

Comments
 (0)