X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Frender-tasks%2Frender-task-impl.cpp;h=a97069bd09108981692be29f0dbabe0df0a7c86b;hb=462cbee2270984cdca45488f3733d664dcf49187;hp=a1ad2b81a34d351ff8e97aca16a44af52774a8cb;hpb=bb77ea964d549e64d747b1c13b6e5ff853cf0709;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/render-tasks/render-task-impl.cpp b/dali/internal/event/render-tasks/render-task-impl.cpp index a1ad2b8..a97069b 100644 --- a/dali/internal/event/render-tasks/render-task-impl.cpp +++ b/dali/internal/event/render-tasks/render-task-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -147,54 +147,28 @@ CameraActor* RenderTask::GetCameraActor() const return static_cast< CameraActor* >( mCameraConnector.mActor ); } -void RenderTask::SetTargetFrameBuffer( Dali::FrameBufferImage image ) +void RenderTask::SetTargetFrameBuffer( FrameBufferImagePtr image ) { - if ( mFrameBufferImage != image ) + mFrameBufferImage = image; + FrameBuffer* frameBufferPtr( NULL ); + if( image ) { - // if we have a scene object we need to track connection status and set frame buffer id as well as updating target frame buffer - if ( mSceneObject ) - { - if(mFrameBufferImage) - { - GetImplementation(mFrameBufferImage).Disconnect(); - } - - // update target frame buffer - mFrameBufferImage = image; - - unsigned int resourceId = 0; - bool isNativeFBO = false; - if( mFrameBufferImage ) - { - Dali::Internal::FrameBufferImage& impl = GetImplementation( mFrameBufferImage ); - impl.Connect(); - resourceId = impl.GetResourceId(); - isNativeFBO = impl.IsNativeFbo(); - } - - // mSceneObject is being used in a separate thread; queue a message to set the value - SetFrameBufferIdMessage( GetEventThreadServices(), *mSceneObject, resourceId, isNativeFBO ); - } - else - { - // update target frame buffer - mFrameBufferImage = image; - } + frameBufferPtr = image->GetFrameBuffer(); } + + SetFrameBuffer( frameBufferPtr ); } -void RenderTask::SetFrameBuffer( Dali::FrameBuffer frameBuffer ) +void RenderTask::SetFrameBuffer( FrameBufferPtr frameBuffer ) { + mFrameBuffer = frameBuffer; + Render::FrameBuffer* renderFrameBufferPtr( NULL ); if( frameBuffer ) { - mFrameBuffer = Internal::FrameBufferPtr( &GetImplementation( frameBuffer ) ); - SetFrameBufferMessage( GetEventThreadServices(), *mSceneObject, mFrameBuffer->GetRenderObject() ); - } - else - { - mFrameBuffer.Reset(); - SetFrameBufferMessage( GetEventThreadServices(), *mSceneObject, NULL ); + renderFrameBufferPtr = mFrameBuffer->GetRenderObject(); } + + SetFrameBufferMessage( GetEventThreadServices(), *mSceneObject, renderFrameBufferPtr ); } FrameBuffer* RenderTask::GetFrameBuffer() const @@ -202,9 +176,9 @@ FrameBuffer* RenderTask::GetFrameBuffer() const return mFrameBuffer.Get(); } -Dali::FrameBufferImage RenderTask::GetTargetFrameBuffer() const +FrameBufferImage* RenderTask::GetTargetFrameBuffer() const { - return mFrameBufferImage; + return mFrameBufferImage.Get(); } void RenderTask::SetScreenToFrameBufferFunction( ScreenToFrameBufferFunction conversionFunction ) @@ -229,6 +203,8 @@ Actor* RenderTask::GetScreenToFrameBufferMappingActor() const void RenderTask::SetViewportPosition(const Vector2& value) { + mViewportPosition = value; + BakeViewportPositionMessage( GetEventThreadServices(), *mSceneObject, value ); } @@ -239,6 +215,8 @@ Vector2 RenderTask::GetCurrentViewportPosition() const void RenderTask::SetViewportSize(const Vector2& value) { + mViewportSize = value; + BakeViewportSizeMessage( GetEventThreadServices(), *mSceneObject, value ); } @@ -262,8 +240,8 @@ void RenderTask::GetViewport( Viewport& viewPort ) const if ( mFrameBufferImage ) { viewPort.x = viewPort.y = 0; - viewPort.width = mFrameBufferImage.GetWidth(); - viewPort.height = mFrameBufferImage.GetHeight(); + viewPort.width = mFrameBufferImage->GetWidth(); + viewPort.height = mFrameBufferImage->GetHeight(); } else { @@ -505,26 +483,14 @@ SceneGraph::RenderTask* RenderTask::CreateSceneObject() // Keep the raw-pointer until DiscardSceneObject is called mSceneObject = SceneGraph::RenderTask::New(); - // if we have a frame buffer we need to track connection status then send a message to set the frame buffer id in case it has changed since last time we were on stage - unsigned int resourceId = 0; - bool isNativeFBO = false; - if( mFrameBufferImage ) - { - Dali::Internal::FrameBufferImage& impl = GetImplementation( mFrameBufferImage ); - impl.Connect(); - resourceId = impl.GetResourceId(); - isNativeFBO = impl.IsNativeFbo(); - } - - // mSceneObject is being used in a separate thread; queue a message to set the value - SetFrameBufferIdMessage( GetEventThreadServices(), *mSceneObject, resourceId, isNativeFBO ); - // Send messages to set other properties that may have changed since last time we were on stage SetExclusiveMessage( GetEventThreadServices(), *mSceneObject, mExclusive ); SetClearColorMessage( GetEventThreadServices(), *mSceneObject, mClearColor ); SetClearEnabledMessage( GetEventThreadServices(), *mSceneObject, mClearEnabled ); SetCullModeMessage( GetEventThreadServices(), *mSceneObject, mCullMode ); SetRefreshRateMessage( GetEventThreadServices(), *mSceneObject, mRefreshRate ); + SetSyncRequiredMessage( GetEventThreadServices(), *mSceneObject, mRequiresSync ); + SetFrameBuffer( mFrameBuffer ); // Caller takes ownership return mSceneObject; @@ -539,12 +505,6 @@ void RenderTask::DiscardSceneObject() { // mSceneObject is not owned; throw away the raw-pointer mSceneObject = NULL; - - // if we have a frame buffer we need to track connection status - if(mFrameBufferImage) - { - GetImplementation(mFrameBufferImage).Disconnect(); - } } /******************************************************************************** @@ -662,6 +622,44 @@ Property::Value RenderTask::GetDefaultProperty(Property::Index index) const case Dali::RenderTask::Property::VIEWPORT_POSITION: { + value = mViewportPosition; + break; + } + case Dali::RenderTask::Property::VIEWPORT_SIZE: + { + value = mViewportSize; + break; + } + case Dali::RenderTask::Property::CLEAR_COLOR: + { + value = mClearColor; + break; + } + case Dali::RenderTask::Property::REQUIRES_SYNC: + { + value = IsSyncRequired(); + break; + } + + default: + { + DALI_ASSERT_ALWAYS(false && "RenderTask property index out of range"); // should not come here + break; + } + } + + return value; +} + +Property::Value RenderTask::GetDefaultPropertyCurrentValue( Property::Index index ) const +{ + Property::Value value; + + switch ( index ) + { + + case Dali::RenderTask::Property::VIEWPORT_POSITION: + { value = GetCurrentViewportPosition(); break; } @@ -691,6 +689,34 @@ Property::Value RenderTask::GetDefaultProperty(Property::Index index) const return value; } +void RenderTask::OnNotifyDefaultPropertyAnimation( Animation& animation, Property::Index index, const Property::Value& value ) +{ + switch ( index ) + { + case Dali::RenderTask::Property::VIEWPORT_POSITION: + { + value.Get( mViewportPosition ); + break; + } + case Dali::RenderTask::Property::VIEWPORT_SIZE: + { + value.Get( mViewportSize ); + break; + } + case Dali::RenderTask::Property::CLEAR_COLOR: + { + value.Get( mClearColor ); + break; + } + case Dali::RenderTask::Property::REQUIRES_SYNC: + default: + { + // Nothing to do as not animatable + break; + } + } +} + const SceneGraph::PropertyOwner* RenderTask::GetSceneObject() const { return mSceneObject; @@ -810,6 +836,8 @@ RenderTask::RenderTask( bool isSystemLevel ) mCameraConnector( Connector::CAMERA_CONNECTOR, *this ), mMappingConnector( Connector::MAPPING_CONNECTOR, *this ), mClearColor( Dali::RenderTask::DEFAULT_CLEAR_COLOR ), + mViewportPosition( Vector2::ZERO ), + mViewportSize( Vector2::ZERO ), mRefreshRate( Dali::RenderTask::DEFAULT_REFRESH_RATE ), mRefreshOnceCounter( 0u ), mScreenToFrameBufferFunction( Dali::RenderTask::DEFAULT_SCREEN_TO_FRAMEBUFFER_FUNCTION ),