X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Frendering%2Fatlas%2Ftext-atlas-renderer.cpp;h=7c629fdc6e4aab2d7bef63b8a7d0f5a3b4ac4093;hp=b655772532e9d9ab37035e19dc4ca022b2fbe5c5;hb=1303adb9af25ae1b954cbb9c59c643313c42b04a;hpb=933609809da8a14c306789bc01b461a5116180ed diff --git a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp index b655772..7c629fd 100644 --- a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp +++ b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp @@ -358,6 +358,7 @@ struct AtlasRenderer::Impl : public ConnectionTracker // Now remove references for the old text RemoveText(); mTextCache.Swap( newTextCache ); + RemoveAllShadowRenderTasks(); if( thereAreUnderlinedGlyphs ) { @@ -759,36 +760,33 @@ struct AtlasRenderer::Impl : public ConnectionTracker subActor.SetSize( actorSize ); subActor.SetColor( shadowColor ); - // Discard redundant render-tasks - RemoveShadowRenderTask(); - // Create a render task to render the effect - mShadowTask = Stage::GetCurrent().GetRenderTaskList().CreateTask(); - mShadowTask.SetTargetFrameBuffer( meshRecord.mBuffer ); - mShadowTask.SetSourceActor( subActor ); - mShadowTask.SetClearEnabled( true ); - mShadowTask.SetClearColor( Vector4::ZERO ); - mShadowTask.SetExclusive( true ); - mShadowTask.SetRefreshRate( RenderTask::REFRESH_ONCE ); - mShadowTask.FinishedSignal().Connect( this, &AtlasRenderer::Impl::RenderComplete ); + RenderTask shadowTask = Stage::GetCurrent().GetRenderTaskList().CreateTask(); + shadowTask.SetTargetFrameBuffer( meshRecord.mBuffer ); + shadowTask.SetSourceActor( subActor ); + shadowTask.SetClearEnabled( true ); + shadowTask.SetClearColor( Vector4::ZERO ); + shadowTask.SetExclusive( true ); + shadowTask.SetRefreshRate( RenderTask::REFRESH_ONCE ); + shadowTask.FinishedSignal().Connect( this, &AtlasRenderer::Impl::RenderComplete ); + mShadowTasks.push_back( shadowTask ); actor.Add( subActor ); return actor; } - void RemoveShadowRenderTask() + void RemoveShadowRenderTask( RenderTask renderTask ) { - if( mShadowTask ) + if( renderTask ) { - mShadowTask.FinishedSignal().Disconnect( this, &AtlasRenderer::Impl::RenderComplete ); + renderTask.FinishedSignal().Disconnect( this, &AtlasRenderer::Impl::RenderComplete ); // Guard to prevent accessing Stage after dali-core destruction if( Stage::IsInstalled() ) { - Stage::GetCurrent().GetRenderTaskList().RemoveTask( mShadowTask ); + Stage::GetCurrent().GetRenderTaskList().RemoveTask( renderTask ); } - - mShadowTask.Reset(); + renderTask.Reset(); } } @@ -805,12 +803,21 @@ struct AtlasRenderer::Impl : public ConnectionTracker } } - RemoveShadowRenderTask(); + RemoveShadowRenderTask( renderTask ); + } + + void RemoveAllShadowRenderTasks() + { + for ( std::vector< RenderTask >::iterator shadowIterator = mShadowTasks.begin(); + shadowIterator != mShadowTasks.end(); ++shadowIterator ) + { + RemoveShadowRenderTask( *shadowIterator ); + } } Actor mActor; ///< The actor parent which renders the text AtlasGlyphManager mGlyphManager; ///< Glyph Manager to handle upload and caching - RenderTask mShadowTask; ///< Used to render shadows + std::vector< RenderTask > mShadowTasks; ///< Used to render shadows TextAbstraction::FontClient mFontClient; ///> The font client used to supply glyph information std::vector< MaxBlockSize > mBlockSizes; ///> Maximum size needed to contain a glyph in a block within a new atlas std::vector< uint32_t > mFace; ///> Face indices for a quad @@ -865,7 +872,7 @@ AtlasRenderer::AtlasRenderer() AtlasRenderer::~AtlasRenderer() { - mImpl->RemoveShadowRenderTask(); + mImpl->RemoveAllShadowRenderTasks(); mImpl->RemoveText(); delete mImpl;