#include <dali/internal/event/actors/camera-actor-impl.h>
#include <dali/internal/event/common/property-helper.h>
#include <dali/internal/event/common/stage-impl.h>
+#include <dali/internal/event/common/scene-impl.h>
#include <dali/internal/event/common/projection.h>
#include <dali/internal/event/images/frame-buffer-image-impl.h>
#include <dali/internal/update/nodes/node.h>
void RenderTask::SetSourceActor( Actor* actor )
{
- mSourceActor = actor;
- if ( mSourceActor )
+ mSourceActor.SetActor( actor );
+ if ( actor )
{
- SetSourceNodeMessage( GetEventThreadServices(), GetRenderTaskSceneObject(), &mSourceActor->GetNode() );
+ SetSourceNodeMessage( GetEventThreadServices(), GetRenderTaskSceneObject(), &actor->GetNode() );
}
else
{
Actor* RenderTask::GetSourceActor() const
{
- return mSourceActor;
+ return mSourceActor.GetActor();
}
void RenderTask::SetExclusive( bool exclusive )
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() );
}
else
{
CameraActor* RenderTask::GetCameraActor() const
{
- return mCameraActor;
+ if( mCameraActor.GetActor() )
+ {
+ return static_cast< CameraActor* >( mCameraActor.GetActor() );
+ }
+ return nullptr;
}
void RenderTask::SetTargetFrameBuffer( FrameBufferImagePtr image )
if ( stage )
{
Vector2 size( stage->GetSize() );
+ Actor* sourceActor = mSourceActor.GetActor();
+ if ( sourceActor && sourceActor->OnStage() )
+ {
+ Scene& scene = sourceActor->GetScene();
+ size = scene.GetSize();
+ }
+
viewPort.x = viewPort.y = 0;
viewPort.width = static_cast<int32_t>( size.width ); // truncated
viewPort.height = static_cast<int32_t>( size.height ); // truncated
Internal::Actor* inputMappingActor = &GetImplementation( mappingActor );
CameraActor* localCamera = GetCameraActor();
StagePtr stage = Stage::GetCurrent();
- if( stage )
+ if ( stage )
{
- CameraActor& defaultCamera = stage->GetDefaultCameraActor();
+ Vector2 size( stage->GetSize() );
+ CameraActor* defaultCamera( &stage->GetDefaultCameraActor() );
+ Actor* sourceActor = mSourceActor.GetActor();
+ if ( sourceActor && sourceActor->OnStage() )
+ {
+ Scene& scene = sourceActor->GetScene();
+ size = scene.GetSize();
+ defaultCamera = &scene.GetDefaultCameraActor();
+ }
+
if( localCamera )
{
Viewport viewport;
- Vector2 size( stage->GetSize() );
viewport.x = viewport.y = 0;
viewport.width = static_cast<int32_t>( size.width ); // truncated
viewport.height = static_cast<int32_t>( size.height ); // truncated
float localX, localY;
- inside = inputMappingActor->ScreenToLocal(defaultCamera.GetViewMatrix(), defaultCamera.GetProjectionMatrix(), viewport, localX, localY, screenCoords.x, screenCoords.y);
+ inside = inputMappingActor->ScreenToLocal(defaultCamera->GetViewMatrix(), defaultCamera->GetProjectionMatrix(), viewport, localX, localY, screenCoords.x, screenCoords.y);
Vector3 actorSize = inputMappingActor->GetCurrentSize();
if( inside && localX >= 0.f && localX <= actorSize.x && localY >= 0.f && localY <= actorSize.y)
{
return *static_cast<const SceneGraph::RenderTask*>( mUpdateObject );
}
+RenderTaskList& RenderTask::GetRenderTaskList() const
+{
+ return mRenderTaskList;
+}
+
/********************************************************************************
******************************** PROPERTY METHODS **************************
********************************************************************************/
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 ),