X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fimage%2Fimage-visual.cpp;h=b8abd9b2e1c9fff4ab14b09c50b96b681133e880;hp=194b9ba52556cb79d4f40ba9ff3fe53cb246f5de;hb=bdeb351ea382b8cd49404cf197a1945c24289f79;hpb=d51cf112336be005eec7a543b5665bfb7480918c diff --git a/dali-toolkit/internal/visuals/image/image-visual.cpp b/dali-toolkit/internal/visuals/image/image-visual.cpp index 194b9ba..b8abd9b 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.cpp +++ b/dali-toolkit/internal/visuals/image/image-visual.cpp @@ -21,7 +21,7 @@ // EXTERNAL HEADERS #include // for strlen() #include -#include +#include #include #include #include @@ -40,6 +40,7 @@ #include #include #include +#include namespace Dali { @@ -515,7 +516,15 @@ void ImageVisual::CreateRenderer( TextureSet& textureSet ) if( !mImpl->mCustomShader ) { - geometry = CreateGeometry( mFactoryCache, ImageDimensions( 1, 1 ) ); + TextureManager& textureManager = mFactoryCache.GetTextureManager(); + + uint32_t firstElementCount {0u}; + uint32_t secondElementCount {0u}; + geometry = textureManager.GetRenderGeometry(mTextureId, firstElementCount, secondElementCount); + if(!firstElementCount && !secondElementCount) + { + geometry = CreateGeometry( mFactoryCache, ImageDimensions( 1, 1 ) ); + } shader = mImageVisualShaderFactory.GetShader( mFactoryCache, mImpl->mFlags & Impl::IS_ATLASING_APPLIED, @@ -650,7 +659,7 @@ void ImageVisual::InitializeRenderer() } } -void ImageVisual::DoSetOnStage( Actor& actor ) +void ImageVisual::DoSetOnScene( Actor& actor ) { if( mImageUrl.IsValid() ) { @@ -686,9 +695,9 @@ void ImageVisual::DoSetOnStage( Actor& actor ) } } -void ImageVisual::DoSetOffStage( Actor& actor ) +void ImageVisual::DoSetOffScene( Actor& actor ) { - // Visual::Base::SetOffStage only calls DoSetOffStage if mRenderer exists (is on onstage) + // Visual::Base::SetOffScene only calls DoSetOffScene if mRenderer exists (is on onstage) // Image release is dependent on the ReleasePolicy, renderer is destroyed. actor.RemoveRenderer( mImpl->mRenderer); @@ -850,6 +859,37 @@ void ImageVisual::UploadComplete( bool loadingSuccess, int32_t textureId, Textur { resourceStatus = Toolkit::Visual::ResourceStatus::FAILED; } + + // use geometry if needed + if( loadingSuccess ) + { + uint32_t firstElementCount{0u}; + uint32_t secondElementCount{0u}; + auto geometry = mFactoryCache.GetTextureManager().GetRenderGeometry(mTextureId, firstElementCount, secondElementCount); + if (mImpl->mRenderer && geometry) + { + mImpl->mRenderer.SetGeometry(geometry); + Dali::DevelRenderer::DrawCommand drawCommand{}; + drawCommand.drawType = DevelRenderer::DrawType::INDEXED; + + if (firstElementCount) + { + drawCommand.firstIndex = 0; + drawCommand.elementCount = firstElementCount; + drawCommand.queue = DevelRenderer::RENDER_QUEUE_OPAQUE; + DevelRenderer::AddDrawCommand(mImpl->mRenderer, drawCommand); + } + + if (secondElementCount) + { + drawCommand.firstIndex = firstElementCount; + drawCommand.elementCount = secondElementCount; + drawCommand.queue = DevelRenderer::RENDER_QUEUE_TRANSPARENT; + DevelRenderer::AddDrawCommand(mImpl->mRenderer, drawCommand); + } + } + } + // Signal to observers ( control ) that resources are ready. Must be all resources. ResourceReady( resourceStatus ); mLoading = false;