application.SendNotification();
application.Render();
- // renderer is not added to actor until the rasterization is completed.
- DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
-
DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
// renderer is added to actor
application.SendNotification();
application.Render();
- // renderer is not added to actor until the rasterization is completed.
- DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
-
DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
// renderer is added to actor
return mPixelData;
}
-SvgRasterizeThread::SvgRasterizeThread( EventThreadCallback* trigger )
-: mTrigger( std::unique_ptr< EventThreadCallback >(trigger) ),
+SvgRasterizeThread::SvgRasterizeThread()
+: mTrigger( new EventThreadCallback( MakeCallback( this, &SvgRasterizeThread::ApplyRasterizedSVGToSampler ) ) ),
mLogFactory( Dali::Adaptor::Get().GetLogFactory() ),
- mIsThreadWaiting( false )
+ mIsThreadWaiting( false ),
+ mProcessorRegistered( false )
{
}
SvgRasterizeThread::~SvgRasterizeThread()
{
+ if( mProcessorRegistered )
+ {
+ Adaptor::Get().UnregisterProcessor( *this );
+ }
}
void SvgRasterizeThread::TerminateThread( SvgRasterizeThread*& thread )
}
}
mRasterizeTasks.push_back( task );
+
+ if( !mProcessorRegistered )
+ {
+ Adaptor::Get().RegisterProcessor( *this );
+ mProcessorRegistered = true;
+ }
}
if( wasEmpty)
}
}
}
+
+ UnregisterProcessor();
}
void SvgRasterizeThread::DeleteImage( VectorImageRenderer vectorRenderer )
}
}
+void SvgRasterizeThread::ApplyRasterizedSVGToSampler()
+{
+ while( RasterizingTaskPtr task = NextCompletedTask() )
+ {
+ task->GetSvgVisual()->ApplyRasterizedImage(task->GetVectorRenderer(), task->GetPixelData(), task->IsLoaded());
+ }
+
+ UnregisterProcessor();
+}
+
+void SvgRasterizeThread::Process()
+{
+ ApplyRasterizedSVGToSampler();
+}
+
+void SvgRasterizeThread::UnregisterProcessor()
+{
+ if ( mProcessorRegistered )
+ {
+ if( mRasterizeTasks.empty() && mCompletedTasks.empty() )
+ {
+ Adaptor::Get().UnregisterProcessor( *this );
+ mProcessorRegistered = false;
+ }
+ }
+}
+
+
} // namespace Internal
} // namespace Toolkit
#include <dali/public-api/rendering/texture-set.h>
#include <dali/devel-api/adaptor-framework/vector-image-renderer.h>
#include <dali/integration-api/adaptor-framework/log-factory-interface.h>
+#include <dali/integration-api/processor-interface.h>
#include <memory>
// INTERNAL INCLUDES
/**
* The worker thread for SVG rasterization.
*/
-class SvgRasterizeThread : public Thread
+class SvgRasterizeThread : public Thread, Integration::Processor
{
public:
*
* @param[in] trigger The trigger to wake up the main thread.
*/
- SvgRasterizeThread( EventThreadCallback* trigger );
+ SvgRasterizeThread();
/**
* Terminate the svg rasterize thread, join and delete.
*/
void DeleteImage( VectorImageRenderer vectorImage );
+ /**
+ * @copydoc Dali::Integration::Processor::Process()
+ */
+ void Process() override;
+
private:
/**
*/
void AddCompletedTask( RasterizingTaskPtr task );
+ /**
+ * Applies the rasterized image to material
+ */
+ void ApplyRasterizedSVGToSampler();
+
+ /**
+ * @brief Unregister a previously registered processor
+ *
+ */
+ void UnregisterProcessor();
+
protected:
/**
std::unique_ptr< EventThreadCallback > mTrigger;
const Dali::LogFactoryInterface& mLogFactory;
bool mIsThreadWaiting;
+ bool mProcessorRegistered;
};
} // namespace Internal
{
if( !mSvgRasterizeThread )
{
- mSvgRasterizeThread = new SvgRasterizeThread( new EventThreadCallback( MakeCallback( this, &VisualFactoryCache::ApplyRasterizedSVGToSampler ) ) );
+ mSvgRasterizeThread = new SvgRasterizeThread();
mSvgRasterizeThread->Start();
}
return mSvgRasterizeThread;
return *mVectorAnimationManager;
}
-void VisualFactoryCache::ApplyRasterizedSVGToSampler()
-{
- while( RasterizingTaskPtr task = mSvgRasterizeThread->NextCompletedTask() )
- {
- task->GetSvgVisual()->ApplyRasterizedImage(task->GetVectorRenderer(), task->GetPixelData(), task->IsLoaded());
- }
-}
-
Geometry VisualFactoryCache::CreateGridGeometry( Uint16Pair gridSize )
{
uint16_t gridWidth = gridSize.GetWidth();
*/
VectorAnimationManager& GetVectorAnimationManager();
-private: // for svg rasterization thread
-
- /**
- * Applies the rasterized image to material
- */
- void ApplyRasterizedSVGToSampler();
-
protected:
/**