diff --git a/Engine/source/T3D/assets/ImageAsset.cpp b/Engine/source/T3D/assets/ImageAsset.cpp index a17b7f934..7e0cf1952 100644 --- a/Engine/source/T3D/assets/ImageAsset.cpp +++ b/Engine/source/T3D/assets/ImageAsset.cpp @@ -149,7 +149,6 @@ ImageAsset::ImageAsset() : mUseMips(true), mIsHDRImage(false), mImageType(Albedo), - mTextureHandle(NULL), mIsNamedTarget(false), mImageWidth(-1), mImageHeight(-1), @@ -473,7 +472,8 @@ U32 ImageAsset::load() return mLoadedState; } - Con::errorf("ImageAsset::initializeAsset: Attempted to load file %s but it was not valid!", mImageFile); + if (mLoadedState != AssetErrCode::BadFileReference && mLoadedState != AssetErrCode::Failed) + Con::errorf("ImageAsset::initializeAsset: Attempted to load file %s but it was not valid!", mImageFile); mLoadedState = BadFileReference; return mLoadedState; } @@ -487,7 +487,15 @@ U32 ImageAsset::load() GFXTexHandle ImageAsset::getTexture(GFXTextureProfile* requestedProfile) { - load(); + if (mLoadedState == Ok && mResourceMap.contains(requestedProfile)) + { + return mResourceMap.find(requestedProfile)->value; + } + else + { + //try a reload + load(); + } if (isNamedTarget()) { @@ -499,77 +507,32 @@ GFXTexHandle ImageAsset::getTexture(GFXTextureProfile* requestedProfile) tex = getNamedTarget()->getTexture(); if (tex.isNull()) { - return fallbackAsset->getTexture(); + return fallbackAsset->getTexture(requestedProfile); } - + mResourceMap.insert(requestedProfile, tex); return tex; } else { - return fallbackAsset->getTexture(); + return fallbackAsset->getTexture(requestedProfile); } } if (mLoadedState == Ok) { - if (mResourceMap.contains(requestedProfile)) - { - return mResourceMap.find(requestedProfile)->value; - } - else - { - //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 %s() - mTextureObject (line %d)", mImageFile, __FUNCTION__, __LINE__)); if (newTex) { - mLoadedState = AssetErrCode::Ok; mResourceMap.insert(requestedProfile, newTex); return newTex; } - } } - mLoadedState = AssetErrCode::Failed; - return nullptr; } -void ImageAsset::generateTexture(void) -{ - // already have a generated texture, get out. - if (mTextureHandle.isValid()) - return; - - // implement some defaults, eventually SRGB should be optional. - U32 flags = GFXTextureProfile::Static | GFXTextureProfile::SRGB; - - // dont want mips? - if (!mUseMips) - { - flags |= GFXTextureProfile::NoMipmap; - } - - GFXTextureProfile::Types type = GFXTextureProfile::Types::DiffuseMap; - - if (mImageType == ImageTypes::Normal) { - type = GFXTextureProfile::Types::NormalMap; - } - - GFXTextureProfile* genProfile = new GFXTextureProfile("ImageAssetGennedProfile", type, flags); - - mTextureHandle.set(mImageFile, genProfile, avar("%s() - mTextureObject (line %d)", __FUNCTION__, __LINE__)); - mResourceMap.insert(genProfile, mTextureHandle); - - if (mTextureHandle.isValid()) - mLoadedState = AssetErrCode::Ok; - else - mLoadedState = AssetErrCode::Failed; - - ResourceManager::get().getChangedSignal().notify(this, &ImageAsset::_onResourceChanged); -} - const char* ImageAsset::getImageTypeNameFromType(ImageAsset::ImageTypes type) { // must match ImageTypes order diff --git a/Engine/source/T3D/assets/ImageAsset.h b/Engine/source/T3D/assets/ImageAsset.h index f05514803..082ddb04f 100644 --- a/Engine/source/T3D/assets/ImageAsset.h +++ b/Engine/source/T3D/assets/ImageAsset.h @@ -136,7 +136,6 @@ private: StringTableEntry mImageFile; bool mUseMips; bool mIsHDRImage; - GFXTexHandle mTextureHandle; ImageTypes mImageType; ImageTextureMap mResourceMap; bool mIsNamedTarget; @@ -144,8 +143,6 @@ private: S32 mImageHeight; S32 mImageDepth; S32 mImageChannels; - - void generateTexture(void); public: ImageAsset(); virtual ~ImageAsset(); @@ -179,7 +176,6 @@ public: void setTextureHDR(const bool pIsHDR); inline bool getTextureHDR(void) const { return mIsHDRImage; }; - inline GFXTexHandle& getTexture(void) { load(); generateTexture(); return mTextureHandle; } GFXTexHandle getTexture(GFXTextureProfile* requestedProfile); static StringTableEntry getImageTypeNameFromType(ImageTypes type); @@ -188,14 +184,9 @@ public: void setImageType(ImageTypes type) { mImageType = type; } ImageTypes getImageType() { return mImageType; } - inline U32 getTextureWidth(void) const { return isAssetValid() ? mTextureHandle->getWidth() : 0; } - inline U32 getTextureHeight(void) const { return isAssetValid() ? mTextureHandle->getHeight() : 0; } - inline U32 getTextureDepth(void) const { return isAssetValid() ? mTextureHandle->getDepth() : 0; } - inline U32 getTextureBitmapWidth(void) const { return mImageWidth; } inline U32 getTextureBitmapHeight(void) const { return mImageHeight; } inline U32 getTextureBitmapDepth(void) const { return mImageDepth; } - bool isAssetValid(void) const override { return !mTextureHandle.isNull(); } bool isNamedTarget(void) const { return mIsNamedTarget; } NamedTexTargetRef getNamedTarget(void) const { return NamedTexTarget::find(mImageFile + 1); } diff --git a/Engine/source/T3D/assets/LevelAsset.cpp b/Engine/source/T3D/assets/LevelAsset.cpp index 067a71121..47d4ad231 100644 --- a/Engine/source/T3D/assets/LevelAsset.cpp +++ b/Engine/source/T3D/assets/LevelAsset.cpp @@ -227,7 +227,7 @@ StringTableEntry LevelAsset::getPreviewImageAsset() const StringTableEntry LevelAsset::getPreviewImagePath(void) const { - if (mPreviewImageAsset.notNull() && mPreviewImageAsset->isAssetValid()) + if (mPreviewImageAsset.notNull()) { return mPreviewImageAsset->getImageFile(); } diff --git a/Engine/source/environment/VolumetricFog.cpp b/Engine/source/environment/VolumetricFog.cpp index 43161b4d0..875982015 100644 --- a/Engine/source/environment/VolumetricFog.cpp +++ b/Engine/source/environment/VolumetricFog.cpp @@ -329,8 +329,8 @@ void VolumetricFog::handleResize(VolumetricFogRTManager *RTM, bool resize) // load texture. getTexture(); - mTexScale.x = 2.0f - ((F32)mTextureAsset->getTextureWidth() / width); - mTexScale.y = 2.0f - ((F32)mTextureAsset->getTextureHeight() / height); + mTexScale.x = 2.0f - ((F32)mTextureAsset->getTextureBitmapWidth() / width); + mTexScale.y = 2.0f - ((F32)mTextureAsset->getTextureBitmapHeight() / height); } UpdateBuffers(0,true); @@ -1228,8 +1228,8 @@ void VolumetricFog::InitTexture() F32 width = (F32)mPlatformWindow->getClientExtent().x; F32 height = (F32)mPlatformWindow->getClientExtent().y; - mTexScale.x = 2.0f - ((F32)mTextureAsset->getTextureWidth() / width); - mTexScale.y = 2.0f - ((F32)mTextureAsset->getTextureHeight() / height); + mTexScale.x = 2.0f - ((F32)mTextureAsset->getTextureBitmapWidth() / width); + mTexScale.y = 2.0f - ((F32)mTextureAsset->getTextureBitmapHeight() / height); } }