void WidgetView::UpdateImageSource( tbm_surface_h source )
{
+ Toolkit::Visual::Base widgetVisual = Dali::Toolkit::DevelControl::GetVisual(*this, Dali::WidgetView::WidgetView::Property::WIDGET_ID);
+ if(widgetVisual && mImageSource)
+ {
+ Any nativeSource(source);
+ mImageSource->SetSource(nativeSource);
+ Dali::Stage::GetCurrent().KeepRendering(0.0f);
+ return;
+ }
+
mImageSource = Dali::NativeImageSource::New( source );
// Create NativeImageSource using tbm_surface
Dali::TextureSet textureSet = mRenderer.GetTextures();
textureSet.SetTexture( 0u, texture );
mRenderer.SetProperty( Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, true );
+
+ auto widgetBuffer = new WidgetBuffer(mBuffer,*this,mImageSource);
+ Dali::DevelNativeImageSource::SetResourceDestructionCallback(*mImageSource, new EventThreadCallback(MakeCallback(widgetBuffer, &WidgetBuffer::OnResourceDestruction)));
+ mBufferContainer.push_back(std::unique_ptr<WidgetBuffer>(widgetBuffer));
}
else
{
Dali::Toolkit::DevelControl::UnregisterVisual(*this, Dali::WidgetView::WidgetView::Property::WIDGET_ID);
}
}
-
- auto widgetBuffer = new WidgetBuffer(mBuffer,*this,mImageSource);
- Dali::DevelNativeImageSource::SetResourceDestructionCallback(*mImageSource, new EventThreadCallback(MakeCallback(widgetBuffer, &WidgetBuffer::OnResourceDestruction)));
- mBufferContainer.push_back(std::unique_ptr<WidgetBuffer>(widgetBuffer));
}
bool WidgetView::OnTouch( Dali::Actor actor, const Dali::TouchEvent& event )
mBufferContainer.clear();
mBuffer = NULL;
}
+ else
+ {
+ // delete previous buffer. this is widget visual case
+ if(mBuffer)
+ {
+ if( mRemoteSurface != NULL && mBuffer != NULL && tizen_remote_surface_get_version( mRemoteSurface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION )
+ {
+ screen_connector_toolkit_dispose_buffer( mWatcherHandle , mBuffer );
+ }
+ }
+ }
+
+ mBuffer = NULL;
screen_connector_toolkit_remove( mWatcherHandle );
mWatcherHandle = NULL;
return;
}
+ // WidgetVisual can't use buffer container because of flickering issue
+ // To Avoid it, we dispose mBuffer before get a new buffer
+ if( mWatcherHandle != NULL && mBufferContainer.size() == 0)
+ {
+ if( mRemoteSurface != NULL && mBuffer != NULL && tizen_remote_surface_get_version( mRemoteSurface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION )
+ {
+ screen_connector_toolkit_dispose_buffer( mWatcherHandle , mBuffer );
+ }
+ }
+
mBuffer = buffer;
UpdateImageSource( tbmSurface );
mRemoteSurface = surface;