If a source actor or a camera actor of the RenderTask are destoryed, then ensure they are appropriately updated
Change-Id: Ifb9db5d14dde2a648df5d9d4bb9e322369c20b5a
void RenderTask::SetSourceActor( Actor* actor )
{
void RenderTask::SetSourceActor( Actor* actor )
{
- mSourceActor = actor;
- if ( mSourceActor )
+ mSourceActor.SetActor( actor );
+ if ( actor )
- SetSourceNodeMessage( GetEventThreadServices(), GetRenderTaskSceneObject(), &mSourceActor->GetNode() );
+ SetSourceNodeMessage( GetEventThreadServices(), GetRenderTaskSceneObject(), &actor->GetNode() );
Actor* RenderTask::GetSourceActor() const
{
Actor* RenderTask::GetSourceActor() const
{
+ return mSourceActor.GetActor();
}
void RenderTask::SetExclusive( bool exclusive )
}
void RenderTask::SetExclusive( bool exclusive )
void RenderTask::SetCameraActor( CameraActor* cameraActor )
{
void RenderTask::SetCameraActor( CameraActor* cameraActor )
{
- mCameraActor = cameraActor;
- if( mCameraActor )
+ mCameraActor.SetActor( cameraActor );
+ if( cameraActor )
- SetCameraMessage( GetEventThreadServices(), GetRenderTaskSceneObject(), &mCameraActor->GetNode(), mCameraActor->GetCamera() );
+ SetCameraMessage( GetEventThreadServices(), GetRenderTaskSceneObject(), &cameraActor->GetNode(), cameraActor->GetCamera() );
CameraActor* RenderTask::GetCameraActor() const
{
CameraActor* RenderTask::GetCameraActor() const
{
+ if( mCameraActor.GetActor() )
+ {
+ return static_cast< CameraActor* >( mCameraActor.GetActor() );
+ }
+ return nullptr;
}
void RenderTask::SetTargetFrameBuffer( FrameBufferImagePtr image )
}
void RenderTask::SetTargetFrameBuffer( FrameBufferImagePtr image )
if ( stage )
{
Vector2 size( stage->GetSize() );
if ( stage )
{
Vector2 size( stage->GetSize() );
- if ( mSourceActor && mSourceActor->OnStage() )
+ Actor* sourceActor = mSourceActor.GetActor();
+ if ( sourceActor && sourceActor->OnStage() )
- Scene& scene = mSourceActor->GetScene();
+ Scene& scene = sourceActor->GetScene();
size = scene.GetSize();
}
size = scene.GetSize();
}
{
Vector2 size( stage->GetSize() );
CameraActor* defaultCamera( &stage->GetDefaultCameraActor() );
{
Vector2 size( stage->GetSize() );
CameraActor* defaultCamera( &stage->GetDefaultCameraActor() );
- if ( mSourceActor && mSourceActor->OnStage() )
+ Actor* sourceActor = mSourceActor.GetActor();
+ if ( sourceActor && sourceActor->OnStage() )
- Scene& scene = mSourceActor->GetScene();
+ Scene& scene = sourceActor->GetScene();
size = scene.GetSize();
defaultCamera = &scene.GetDefaultCameraActor();
}
size = scene.GetSize();
defaultCamera = &scene.GetDefaultCameraActor();
}
RenderTask::RenderTask( const SceneGraph::RenderTask* sceneObject, RenderTaskList& renderTaskList )
: Object( sceneObject ),
RenderTask::RenderTask( const SceneGraph::RenderTask* sceneObject, RenderTaskList& renderTaskList )
: Object( sceneObject ),
- mSourceActor( nullptr ),
- mCameraActor( nullptr ),
+ mSourceActor(),
+ mCameraActor(),
mInputMappingActor(),
mRenderTaskList( renderTaskList ),
mClearColor( Dali::RenderTask::DEFAULT_CLEAR_COLOR ),
mInputMappingActor(),
mRenderTaskList( renderTaskList ),
mClearColor( Dali::RenderTask::DEFAULT_CLEAR_COLOR ),
#include <dali/internal/event/common/object-impl.h>
#include <dali/internal/event/rendering/frame-buffer-impl.h>
#include <dali/internal/event/render-tasks/render-task-list-impl.h>
#include <dali/internal/event/common/object-impl.h>
#include <dali/internal/event/rendering/frame-buffer-impl.h>
#include <dali/internal/event/render-tasks/render-task-list-impl.h>
+#include <dali/internal/event/events/actor-observer.h>
- Actor* mSourceActor; ///< Source actor, we cannot keep the actor alive so raw pointer.
- CameraActor* mCameraActor; ///< Camera actor, we cannot keep the actor alive so raw pointer.
+ ActorObserver mSourceActor; ///< Source actor
+ ActorObserver mCameraActor; ///< Camera actor
WeakHandle<Dali::Actor> mInputMappingActor; /// used to mapping screen to frame buffer coordinate, not kept alive by rendertask
RenderTaskList& mRenderTaskList; ///< The render task list
WeakHandle<Dali::Actor> mInputMappingActor; /// used to mapping screen to frame buffer coordinate, not kept alive by rendertask
RenderTaskList& mRenderTaskList; ///< The render task list