/*
- * 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.
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;
+ frameBufferPtr = image->GetFrameBuffer();
+ }
- unsigned int resourceId = 0;
- bool isNativeFBO = false;
- if( mFrameBufferImage )
- {
- Dali::Internal::FrameBufferImage& impl = GetImplementation( mFrameBufferImage );
- impl.Connect();
- resourceId = impl.GetResourceId();
- isNativeFBO = impl.IsNativeFbo();
- }
+ SetFrameBuffer( frameBufferPtr );
+}
- // 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;
- }
+void RenderTask::SetFrameBuffer( FrameBufferPtr frameBuffer )
+{
+ mFrameBuffer = frameBuffer;
+ Render::FrameBuffer* renderFrameBufferPtr( NULL );
+ if( frameBuffer )
+ {
+ renderFrameBufferPtr = mFrameBuffer->GetRenderObject();
}
+
+ SetFrameBufferMessage( GetEventThreadServices(), *mSceneObject, renderFrameBufferPtr );
}
-Dali::FrameBufferImage RenderTask::GetTargetFrameBuffer() const
+FrameBuffer* RenderTask::GetFrameBuffer() const
{
- return mFrameBufferImage;
+ return mFrameBuffer.Get();
+}
+
+FrameBufferImage* RenderTask::GetTargetFrameBuffer() const
+{
+ return mFrameBufferImage.Get();
}
void RenderTask::SetScreenToFrameBufferFunction( ScreenToFrameBufferFunction conversionFunction )
void RenderTask::SetViewportPosition(const Vector2& value)
{
+ mViewportPosition = value;
+
BakeViewportPositionMessage( GetEventThreadServices(), *mSceneObject, value );
}
void RenderTask::SetViewportSize(const Vector2& value)
{
+ mViewportSize = value;
+
BakeViewportSizeMessage( GetEventThreadServices(), *mSceneObject, value );
}
if ( mFrameBufferImage )
{
viewPort.x = viewPort.y = 0;
- viewPort.width = mFrameBufferImage.GetWidth();
- viewPort.height = mFrameBufferImage.GetHeight();
+ viewPort.width = mFrameBufferImage->GetWidth();
+ viewPort.height = mFrameBufferImage->GetHeight();
}
else
{
// 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;
{
// 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();
- }
}
/********************************************************************************
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;
}
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;
bool RenderTask::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
{
bool connected( true );
- RenderTask* renderTask = dynamic_cast<RenderTask*>(object);
+ RenderTask* renderTask = static_cast< RenderTask* >(object); // TypeRegistry guarantees that this is the correct type.
if ( 0 == strcmp( signalName.c_str(), SIGNAL_FINISHED ) )
{
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 ),