mPlacementActor(),
mVectorRasterizeThread(),
mLoopCount( LOOP_FOREVER ),
- mActionStatus( DevelAnimatedVectorImageVisual::Action::STOP )
+ mActionStatus( DevelAnimatedVectorImageVisual::Action::STOP ),
+ mNeedToSetRenderer( true )
{
// the rasterized image is with pre-multiplied alpha format
mImpl->mFlags |= Impl::IS_PREMULTIPLIED_ALPHA;
Geometry geometry = mFactoryCache.GetGeometry( VisualFactoryCache::QUAD_GEOMETRY );
+ mNeedToSetRenderer = true;
+
mImpl->mRenderer = Renderer::New( geometry, shader );
TextureSet textureSet = TextureSet::New();
uint32_t width = static_cast< uint32_t >( visualSize.width );
uint32_t height = static_cast< uint32_t >( visualSize.height );
- mVectorRasterizeThread = std::unique_ptr< VectorRasterizeThread >( new VectorRasterizeThread( mUrl.GetUrl(), mImpl->mRenderer, width, height ) );
+ mVectorRasterizeThread = std::unique_ptr< VectorRasterizeThread >( new VectorRasterizeThread( mUrl.GetUrl() ) );
+ mVectorRasterizeThread->SetRenderer( mImpl->mRenderer );
+ mVectorRasterizeThread->SetSize( width, height );
mVectorRasterizeThread->SetResourceReadyCallback( new EventThreadCallback( MakeCallback( this, &AnimatedVectorImageVisual::OnResourceReady ) ) );
mVectorRasterizeThread->SetAnimationFinishedCallback( new EventThreadCallback( MakeCallback( this, &AnimatedVectorImageVisual::OnAnimationFinished ) ) );
mVectorRasterizeThread->SetLoopCount( mLoopCount );
mVectorRasterizeThread->SetPlayRange( mPlayRange );
mVectorRasterizeThread->Start();
-
- if( mActionStatus == DevelAnimatedVectorImageVisual::Action::PLAY )
- {
- mVectorRasterizeThread->StartAnimation();
- DevelStage::SetRenderingBehavior( Stage::GetCurrent(), DevelStage::Rendering::CONTINUOUSLY );
- }
- else
- {
- // Render one frame
- mVectorRasterizeThread->RenderFrame();
- }
}
else
{
uint32_t width = static_cast< uint32_t >( visualSize.width );
uint32_t height = static_cast< uint32_t >( visualSize.height );
+ mVectorRasterizeThread->SetRenderer( mImpl->mRenderer );
mVectorRasterizeThread->SetSize( width, height );
}
+
+ mNeedToSetRenderer = false;
+
+ if( mActionStatus == DevelAnimatedVectorImageVisual::Action::PLAY )
+ {
+ mVectorRasterizeThread->StartAnimation();
+ DevelStage::SetRenderingBehavior( Stage::GetCurrent(), DevelStage::Rendering::CONTINUOUSLY );
+ }
+ else
+ {
+ // Render one frame
+ mVectorRasterizeThread->RenderFrame();
+ }
}
}
}
{
if( IsOnStage())
{
- if( mVectorRasterizeThread )
+ // When renderer has changed, do not StartAnimation before SetRenderer(newOne)
+ if( mVectorRasterizeThread && !mNeedToSetRenderer )
{
mVectorRasterizeThread->StartAnimation();
DevelStage::SetRenderingBehavior( Stage::GetCurrent(), DevelStage::Rendering::CONTINUOUSLY ); //TODO: Should manage this globally
} // unnamed namespace
-VectorRasterizeThread::VectorRasterizeThread( const std::string& url, Renderer renderer, uint32_t width, uint32_t height )
+VectorRasterizeThread::VectorRasterizeThread( const std::string& url )
: mUrl( url ),
mVectorRenderer(),
mConditionalWait(),
mTotalFrame( 0 ),
mStartFrame( 0 ),
mEndFrame( 0 ),
- mWidth( width ),
- mHeight( height ),
+ mWidth( 0 ),
+ mHeight( 0 ),
mLoopCount( LOOP_FOREVER ),
mCurrentLoop( 0 ),
mNeedRender( false ),
mResourceReady( false ),
mLogFactory( Dali::Adaptor::Get().GetLogFactory() )
{
- mVectorRenderer = VectorAnimationRenderer::New( mUrl, renderer, width, height );
+ mVectorRenderer = VectorAnimationRenderer::New( mUrl );
}
VectorRasterizeThread::~VectorRasterizeThread()
}
}
+void VectorRasterizeThread::SetRenderer( Renderer renderer )
+{
+ ConditionalWait::ScopedLock lock( mConditionalWait );
+
+ mVectorRenderer.SetRenderer( renderer );
+
+ // Need to trigger resource ready again
+ mResourceReady = false;
+
+ DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "VectorRasterizeThread::SetRenderer\n" );
+}
+
void VectorRasterizeThread::SetSize( uint32_t width, uint32_t height )
{
ConditionalWait::ScopedLock lock( mConditionalWait );
* @brief Constructor.
*
* @param[in] url The url of the vector animation file
- * @param[in] renderer The renderer used to render the image
- * @param[in] width The width of the content
- * @param[in] height The height of the content
*/
- VectorRasterizeThread( const std::string& url, Renderer renderer, uint32_t width, uint32_t height );
+ VectorRasterizeThread( const std::string& url );
/**
* @brief Destructor.
virtual ~VectorRasterizeThread();
/**
+ * @brief Sets the renderer used to display the result image.
+ *
+ * @param[in] renderer The renderer used to display the result image
+ */
+ void SetRenderer( Renderer renderer );
+
+ /**
* @brief Sets the target image size.
*
* @param[in] width The target image width