}
}
+ if(mImageUrl.IsValid())
+ {
+ // Decrease reference count of External Resources :
+ // EncodedImageBuffer or ExternalTextures.
+ // Ensure the stage is still valid before accessing texture manager.
+ if(mImageUrl.GetProtocolType() == VisualUrl::TEXTURE)
+ {
+ TextureManager& textureManager = mFactoryCache.GetTextureManager();
+ textureManager.RemoveExternalTexture(mImageUrl.GetUrl());
+ }
+ else if(mImageUrl.IsBufferResource())
+ {
+ TextureManager& textureManager = mFactoryCache.GetTextureManager();
+ textureManager.RemoveExternalEncodedImageBuffer(mImageUrl.GetUrl());
+ }
+ }
+
// ImageVisual destroyed so remove texture unless ReleasePolicy is set to never release
if((mTextureId != TextureManager::INVALID_TEXTURE_ID) && (mReleasePolicy != Toolkit::ImageVisual::ReleasePolicy::NEVER))
{
}
}
+ // Increase reference count of External Resources :
+ // EncodedImageBuffer or ExternalTextures.
+ // Reference count will be decreased at destructor of the visual.
+ if(mImageUrl.IsValid() && (mImageUrl.IsBufferResource() || mImageUrl.GetProtocolType() == VisualUrl::TEXTURE))
+ {
+ TextureManager& textureManager = mFactoryCache.GetTextureManager();
+ textureManager.UseExternalResource(mImageUrl.GetUrl());
+ }
+
Shader shader = GetShader();
// Create the renderer
if(encodedImageBuffer)
{
textureId = targetId;
+
+ // Increase EncodedImageBuffer reference during it contains mTextureInfoContainer.
+ UseExternalResource(url.GetUrl());
+
// Insert this buffer at mTextureInfoContainer.
// This buffer will decode at ImageLoaderThread.
bool preMultiply = (preMultiplyOnLoad == TextureManager::MultiplyOnLoad::MULTIPLY_ON_LOAD);
// If the state allows us to remove the TextureInfo data, we do so.
if(removeTextureInfo)
{
+ // If url location is BUFFER, decrease reference count of EncodedImageBuffer.
+ if(textureInfo.url.IsBufferResource())
+ {
+ RemoveExternalEncodedImageBuffer(textureInfo.url.GetUrl());
+ }
// Permanently remove the textureInfo struct.
mTextureInfoContainer.erase(mTextureInfoContainer.begin() + textureInfoIndex);
}
// EXTERNAL HEADERS
#include <cstring> // for toupper()
-// INTERNAL HEADERS
-#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
-#include <dali-toolkit/internal/visuals/visual-factory-impl.h>
-
namespace Dali
{
namespace Toolkit
// TEXTURE and BUFFER location url doesn't need type resolving, REGULAR_IMAGE is fine
mType = ResolveType(url);
}
- else
- {
- Toolkit::VisualFactory factory = Toolkit::VisualFactory::Get();
- if(factory)
- {
- GetImplementation(factory).GetTextureManager().UseExternalResource(*this);
- }
- }
}
}
mType(url.mType),
mLocation(url.mLocation)
{
- if(VisualUrl::TEXTURE == mLocation || VisualUrl::BUFFER == mLocation)
- {
- Toolkit::VisualFactory factory = Toolkit::VisualFactory::Get();
- if(factory)
- {
- GetImplementation(factory).GetTextureManager().UseExternalResource(*this);
- }
- }
}
VisualUrl::~VisualUrl()
{
- if(VisualUrl::TEXTURE == mLocation)
- {
- Toolkit::VisualFactory factory = Toolkit::VisualFactory::Get();
- if(factory)
- {
- GetImplementation(factory).GetTextureManager().RemoveExternalTexture(mUrl);
- }
- }
- else if(VisualUrl::BUFFER == mLocation)
- {
- Toolkit::VisualFactory factory = Toolkit::VisualFactory::Get();
- if(factory)
- {
- GetImplementation(factory).GetTextureManager().RemoveExternalEncodedImageBuffer(mUrl);
- }
- }
}
VisualUrl& VisualUrl::operator=(const VisualUrl& url)
{
if(&url != this)
{
- if(VisualUrl::TEXTURE == mLocation)
- {
- Toolkit::VisualFactory factory = Toolkit::VisualFactory::Get();
- if(factory)
- {
- GetImplementation(factory).GetTextureManager().RemoveExternalTexture(mUrl);
- }
- }
- else if(VisualUrl::BUFFER == mLocation)
- {
- Toolkit::VisualFactory factory = Toolkit::VisualFactory::Get();
- if(factory)
- {
- GetImplementation(factory).GetTextureManager().RemoveExternalEncodedImageBuffer(mUrl);
- }
- }
-
mUrl = url.mUrl;
mType = url.mType;
mLocation = url.mLocation;
-
- if(VisualUrl::TEXTURE == mLocation || VisualUrl::BUFFER == mLocation)
- {
- Toolkit::VisualFactory factory = Toolkit::VisualFactory::Get();
- if(factory)
- {
- GetImplementation(factory).GetTextureManager().UseExternalResource(*this);
- }
- }
}
return *this;
}