mRenderer(),
mTexture(),
mRenderedTexture(),
+ mPreviousTexture(),
mTargetSurface(),
mVectorRenderer(),
mUploadCompletedSignal(),
Dali::Mutex::ScopedLock lock( mMutex );
ResetBuffers();
+ DALI_LOG_RELEASE_INFO( "TizenVectorAnimationRenderer::~TizenVectorAnimationRenderer: this = %p\n", this );
}
bool TizenVectorAnimationRenderer::Initialize( const std::string& url )
mVectorRenderer = rlottie::Animation::loadFromFile( mUrl );
if( !mVectorRenderer )
{
- DALI_LOG_ERROR( "Failed to load a Lottie file [%s]\n", mUrl.c_str() );
+ DALI_LOG_ERROR( "Failed to load a Lottie file [%s] [%p]\n", mUrl.c_str(), this );
return false;
}
mRenderer.Reset();
mTexture.Reset();
mRenderedTexture.Reset();
+ mPreviousTexture.Reset();
mVectorRenderer.reset();
mTargetSurface = nullptr;
mResourceReady = false;
+ // Reset the previous texture to destroy it in the main thread
+ mPreviousTexture.Reset();
+
DALI_LOG_RELEASE_INFO( "TizenVectorAnimationRenderer::SetSize: width = %d, height = %d [%p]\n", mWidth, mHeight, this );
}
if( !existing )
{
- tbm_surface_internal_ref( tbmSurface );
-
unsigned char* buffer = info.planes[0].ptr;
+ if( !buffer )
+ {
+ DALI_LOG_ERROR( "TizenVectorAnimationRenderer::Render: tbm buffer pointer is null! [%p]\n", this );
+ tbm_surface_unmap( tbmSurface );
+ return false;
+ }
+
+ tbm_surface_internal_ref( tbmSurface );
// Create Surface object
surface = rlottie::Surface( reinterpret_cast< uint32_t* >( buffer ), mWidth, mHeight, static_cast< size_t >( info.planes[0].stride ) );
if( !mResourceReady )
{
+ mPreviousTexture = mRenderedTexture; // It is used to destroy the object in the main thread.
mRenderedTexture = mTexture;
mResourceReady = true;
mResourceReadyTriggered = true;
mUploadCompletedSignal.Emit();
}
+
+ mPreviousTexture.Reset();
}
void TizenVectorAnimationRenderer::SetShader()
Dali::Renderer mRenderer; ///< Renderer
Dali::Texture mTexture; ///< Texture
Dali::Texture mRenderedTexture; ///< Rendered Texture
+ Dali::Texture mPreviousTexture; ///< Previous rendered texture
NativeImageSourceQueuePtr mTargetSurface; ///< The target surface
std::unique_ptr< rlottie::Animation > mVectorRenderer; ///< The vector animation renderer
UploadCompletedSignalType mUploadCompletedSignal; ///< Upload completed signal