diff --git a/Engine/source/T3D/assets/ImageAsset.cpp b/Engine/source/T3D/assets/ImageAsset.cpp index d9e309f7c..093fde0b8 100644 --- a/Engine/source/T3D/assets/ImageAsset.cpp +++ b/Engine/source/T3D/assets/ImageAsset.cpp @@ -53,6 +53,7 @@ //----------------------------------------------------------------------------- StringTableEntry ImageAsset::smNoImageAssetFallback = NULL; +StringTableEntry ImageAsset::smNamedTargetAssetFallback = NULL; //----------------------------------------------------------------------------- @@ -139,7 +140,6 @@ ConsoleSetType(TypeImageAssetPtrRefactor) // Is the asset pointer the correct type? if (pAssetPtr == NULL) { - // No, so fail. Con::warnf("(TypeImageAssetPtr) - Failed to set asset Id '%d'.", pFieldValue); return; } @@ -207,7 +207,12 @@ void ImageAsset::consoleInit() "The assetId of the texture to display when the requested image asset is missing.\n" "@ingroup GFX\n"); + Con::addVariable("$Core::NamedTargetFallback", TypeString, &smNamedTargetAssetFallback, + "The assetId of the texture to display when the requested image asset is named target.\n" + "@ingroup GFX\n"); + smNoImageAssetFallback = StringTable->insert(Con::getVariable("$Core::NoImageAssetFallback")); + smNamedTargetAssetFallback = StringTable->insert(Con::getVariable("$Core::NamedTargetFallback")); } //----------------------------------------------------------------------------- @@ -447,7 +452,19 @@ GFXTexHandle ImageAsset::getTexture(GFXTextureProfile* requestedProfile) load(); if (isNamedTarget()) - return getNamedTarget()->getTexture(); + { + GFXTexHandle tex = getNamedTarget()->getTexture(); + if(tex.isNull()) + { + AssetPtr fallbackAsset; + ImageAsset::getAssetById(smNamedTargetAssetFallback, &fallbackAsset); + return fallbackAsset->getTexture(); + } + else + { + return tex; + } + } if (mLoadedState == Ok) { @@ -460,7 +477,7 @@ GFXTexHandle ImageAsset::getTexture(GFXTextureProfile* requestedProfile) //If we don't have an existing map case to the requested format, we'll just create it and insert it in GFXTexHandle newTex; - newTex.set(mImageFile, requestedProfile, avar("%s() - mTextureObject (line %d)", __FUNCTION__, __LINE__)); + newTex.set(mImageFile, requestedProfile, avar("%s %s() - mTextureObject (line %d)", mImageFile, __FUNCTION__, __LINE__)); if (newTex) { mLoadedState = AssetErrCode::Ok; diff --git a/Engine/source/T3D/assets/ImageAsset.h b/Engine/source/T3D/assets/ImageAsset.h index d6a6aa1ab..02ec29c5b 100644 --- a/Engine/source/T3D/assets/ImageAsset.h +++ b/Engine/source/T3D/assets/ImageAsset.h @@ -113,6 +113,7 @@ public: }; static StringTableEntry smNoImageAssetFallback; + static StringTableEntry smNamedTargetAssetFallback; enum ImageAssetErrCode { diff --git a/Templates/BaseGame/game/core/rendering/Core_Rendering.tscript b/Templates/BaseGame/game/core/rendering/Core_Rendering.tscript index 1051ee621..8675e3168 100644 --- a/Templates/BaseGame/game/core/rendering/Core_Rendering.tscript +++ b/Templates/BaseGame/game/core/rendering/Core_Rendering.tscript @@ -9,6 +9,7 @@ function Core_Rendering::onCreate(%this) $Core::WetnessTexture = "core/rendering/images/wetMap.png"; $Core::NoImageAssetFallback = "Core_Rendering:missingTexture_image"; + $Core::NamedTargetFallback = "Core_Rendering:namedTarget_image"; $Core::NoMaterialAssetFallback = "Core_Rendering:noMaterial"; $Core::NoShapeAssetFallback = "Core_Rendering:noShape"; diff --git a/Templates/BaseGame/game/core/rendering/images/namedTarget.png b/Templates/BaseGame/game/core/rendering/images/namedTarget.png new file mode 100644 index 000000000..4d2656a5f Binary files /dev/null and b/Templates/BaseGame/game/core/rendering/images/namedTarget.png differ diff --git a/Templates/BaseGame/game/core/rendering/images/namedTarget_image.asset.taml b/Templates/BaseGame/game/core/rendering/images/namedTarget_image.asset.taml new file mode 100644 index 000000000..7cd23509a --- /dev/null +++ b/Templates/BaseGame/game/core/rendering/images/namedTarget_image.asset.taml @@ -0,0 +1,3 @@ +