// Create the list of render-tasks
mRenderTaskList = RenderTaskList::New();
- // Create the default render-task
- Dali::RenderTask defaultRenderTask = mRenderTaskList->CreateTask( mRootLayer.Get(), mDefaultCamera.Get() );
+ // Create the default render-task (don't need the returned handle)
+ mRenderTaskList->CreateTask( mRootLayer.Get(), mDefaultCamera.Get() );
}
void Stage::Uninitialize()
return overlay;
}
-void Stage::SetViewMode( ViewMode viewMode )
-{
- if( mViewMode != viewMode )
- {
- DALI_LOG_INFO( Debug::Filter::gActor, Debug::Concise, "View mode changed from %d to %d\n", mViewMode, viewMode);
-
- if( mViewMode == MONO )
- {
- mDefaultCamera->SetOrientation( Dali::ANGLE_180, Vector3::YAXIS );
- mRenderTaskList->GetTask(0).SetSourceActor( Dali::Actor() );
-
- //Create camera and RenderTask for left eye
- mLeftCamera = CameraActor::New( Size::ZERO );
- mLeftCamera->SetParentOrigin( ParentOrigin::CENTER );
- mDefaultCamera->Add( *mLeftCamera.Get() );
- mLeftRenderTask = mRenderTaskList->CreateTask();
- mLeftRenderTask.SetCameraActor( Dali::CameraActor( mLeftCamera.Get() ) );
- mLeftCamera->SetType( Dali::Camera::FREE_LOOK );
-
- //Create camera and RenderTask for right eye
- mRightCamera = CameraActor::New( Size::ZERO );
- mRightCamera->SetParentOrigin( ParentOrigin::CENTER );
- mDefaultCamera->Add( *mRightCamera.Get() );
- mRightRenderTask = mRenderTaskList->CreateTask();
- mRightRenderTask.SetClearColor( Vector4( 1.0f,0.0f,0.0f,1.0f));
-
- mRightRenderTask.SetCameraActor( Dali::CameraActor( mRightCamera.Get() ) );
- mRightCamera->SetType( Dali::Camera::FREE_LOOK );
- }
-
- // save new mode
- mViewMode = viewMode;
-
- switch( viewMode )
- {
- case MONO:
- {
- // delete extra stereoscopic render tasks and cameras
- mRenderTaskList->RemoveTask( mLeftRenderTask );
- mDefaultCamera->Remove( *mLeftCamera.Get() );
- mLeftRenderTask.Reset();
- mLeftCamera.Reset();
- mRenderTaskList->RemoveTask( mRightRenderTask );
- mDefaultCamera->Remove( *mRightCamera.Get() );
- mRightRenderTask.Reset();
- mRightCamera.Reset();
- mDefaultCamera->SetOrientation( Dali::ANGLE_0, Vector3::YAXIS );
- mDefaultCamera->SetType( Dali::Camera::LOOK_AT_TARGET );
- mRenderTaskList->GetTask(0).SetSourceActor( Dali::Layer(mRootLayer.Get()) );
-
- break;
- }
- case STEREO_HORIZONTAL:
- {
- //Stereo mode with horizontal split is for landscape mode. That's the reason for the cameras being rotated
- //Top camera renders the scene as seen from the right eye and bottom camera as seen from left.
-
- //Calculate separation in pixels along vertical axis ( mStereoBase is defined in millimetres )
- const float stereoBase( ( (mStereoBase / 25.4f) * GetDpi().y ) * 0.5f );
-
- //Calculate aspect ratio
- float aspect = mSize.width / (mSize.height * 0.5f);
-
- mLeftCamera->SetPerspectiveProjection( mSize, Vector2( 0.0f,stereoBase) );
- mLeftCamera->SetAspectRatio( aspect );
-
- mLeftCamera->SetOrientation( -Dali::ANGLE_90, Vector3::ZAXIS );
- mLeftCamera->SetPosition( Vector3( stereoBase, 0.0f, 0.0f ) );
- mLeftRenderTask.SetViewport( Viewport(0, static_cast<int32_t>( mSize.height * 0.5f ), static_cast<int32_t>( mSize.width ), static_cast<int32_t>( mSize.height * 0.5f ) ) ); // truncated
-
- mRightCamera->SetPerspectiveProjection( mSize, Vector2( 0.0, -stereoBase ) );
- mRightCamera->SetAspectRatio( aspect );
- mRightCamera->SetOrientation( -Dali::ANGLE_90, Vector3::ZAXIS );
- mRightCamera->SetPosition( Vector3(-stereoBase, 0.0f, 0.0f ) );
- mRightRenderTask.SetViewport( Viewport(0, 0, static_cast<int32_t>( mSize.width ), static_cast<int32_t>( mSize.height * 0.5f ) ) ); // truncated
-
- break;
- }
- case STEREO_VERTICAL:
- {
- //Calculate separation in pixels along horizontal axis
- const float stereoBase( ( (mStereoBase / 25.4f) * GetDpi().x ) * 0.5f );
-
- //Recalculate fov based on viewport size
- const float fov = 2.0f * std::atan( mSize.y / (2.0f * std::max( mSize.x*0.5f, mSize.y )) );
-
- mLeftCamera->SetPerspectiveProjection( Size( mSize.x * 0.5f, mSize.y ), Vector2(stereoBase,0.0f) );
- mLeftCamera->SetFieldOfView( fov );
- mLeftCamera->SetOrientation( Dali::ANGLE_0, Vector3::ZAXIS );
- mLeftCamera->SetPosition( Vector3( stereoBase, 0.0f, 0.0f ) );
- mLeftRenderTask.SetViewport( Viewport(0, 0, static_cast<int32_t>( mSize.width * 0.5f ), static_cast<int32_t>( mSize.height ) ) ); // truncated
-
- mRightCamera->SetPerspectiveProjection( Size( mSize.x * 0.5f, mSize.y ), Vector2(-stereoBase,0.0f) );
- mRightCamera->SetFieldOfView( fov );
- mRightCamera->SetOrientation( Dali::ANGLE_0, Vector3::ZAXIS );
- mRightCamera->SetPosition( Vector3( -stereoBase, 0.0f, 0.0f ) );
- mRightRenderTask.SetViewport( Viewport( static_cast<int32_t>( mSize.width * 0.5f ), 0, static_cast<int32_t>( mSize.width * 0.5f ), static_cast<int32_t>( mSize.height ) ) ); // truncated
-
- break;
- }
- case STEREO_INTERLACED:
- {
- break;
- }
- }
- }
-}
-
-ViewMode Stage::GetViewMode() const
-{
- return mViewMode;
-}
-
-void Stage::SetStereoBase( float stereoBase )
-{
- if( ! Equals( mStereoBase, stereoBase ) )
- {
- DALI_LOG_INFO( Debug::Filter::gActor, Debug::Concise, "old( %.2f) new(%.2f)\n", mStereoBase, stereoBase );
- mStereoBase = stereoBase;
-
- switch( mViewMode )
- {
- case STEREO_HORIZONTAL:
- {
- stereoBase = mStereoBase / 25.4f * GetDpi().y * 0.5f;
- float aspect = mSize.width / (mSize.height * 0.5f);
-
- mLeftCamera->SetPerspectiveProjection( mSize, Vector2( 0.0, stereoBase) );
- mLeftCamera->SetAspectRatio( aspect );
- mLeftCamera->SetPosition( Vector3( stereoBase, 0.0f, 0.0f ) );
-
- mRightCamera->SetPerspectiveProjection( mSize, Vector2( 0.0, -stereoBase) );
- mRightCamera->SetAspectRatio( aspect );
- mRightCamera->SetPosition( Vector3(-stereoBase, 0.0f, 0.0f ) );
-
- break;
- }
- case STEREO_VERTICAL:
- {
- stereoBase = mStereoBase / 25.4f * GetDpi().x * 0.5f;
- const float fov = 2.0f * std::atan( mSize.y / (2.0f * std::max( mSize.x*0.5f, mSize.y )) );
-
- mLeftCamera->SetPerspectiveProjection( Size( mSize.x * 0.5f, mSize.y ), Vector2(stereoBase,0.0f) );
- mLeftCamera->SetFieldOfView( fov );
- mLeftCamera->SetPosition( Vector3( stereoBase, 0.0f, 0.0f ) );
-
- mRightCamera->SetPerspectiveProjection( Size( mSize.x * 0.5f, mSize.y ), Vector2(-stereoBase,0.0f) );
- mRightCamera->SetFieldOfView( fov );
- mRightCamera->SetPosition( Vector3(-stereoBase, 0.0f, 0.0f ) );
-
- break;
- }
- default:
- break;
- }
- }
-}
-
-float Stage::GetStereoBase() const
-{
- return mStereoBase;
-}
-
void Stage::SetBackgroundColor(Vector4 color)
{
// Cache for public GetBackgroundColor()
mSize( Vector2::ZERO ),
mSurfaceSize( Vector2::ZERO ),
mBackgroundColor( Dali::Stage::DEFAULT_BACKGROUND_COLOR ),
- mViewMode( MONO ),
- mStereoBase( DEFAULT_STEREO_BASE ),
mTopMargin( 0 ),
mDpi( Vector2::ZERO ),
- mRightRenderTask(),
- mLeftRenderTask(),
mSystemOverlay( NULL ),
mKeyEventSignal(),
mKeyEventGeneratedSignal(),