+ CameraActor actor;
+
+ bool asserted = true;
+ try
+ {
+ actor.GetProjectionMode();
+ }
+ catch( Dali::DaliException& e )
+ {
+ DALI_TEST_PRINT_ASSERT( e );
+ DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
+ asserted = true;
+ }
+ DALI_TEST_CHECK( asserted );
+ END_TEST;
+}
+
+int UtcDaliCameraActorSetCameraOffStage(void)
+{
+ TestApplication application;
+ tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
+
+ CameraActor actor = CameraActor::New();
+
+ actor.SetType( Camera::FREE_LOOK );
+ actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
+ actor.SetAspectRatio( TEST_ASPECT_RATIO );
+ actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
+ actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
+ actor.SetProjectionMode( Camera::PERSPECTIVE_PROJECTION );
+
+ actor.SetInvertYAxis( false );
+
+ DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );//change to machine epsilon
+ DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
+ DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
+ DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
+ DALI_TEST_EQUALS( Camera::PERSPECTIVE_PROJECTION, actor.GetProjectionMode(), TEST_LOCATION );
+ DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
+
+ float value;
+ std::string sValue;
+ actor.GetProperty( CameraActor::Property::ASPECT_RATIO).Get( value );
+ DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
+ actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW).Get( value );
+ DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
+ actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE).Get( value );
+ DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
+ actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE).Get( value );
+ DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
+ actor.GetProperty( CameraActor::Property::PROJECTION_MODE).Get( sValue );
+ DALI_TEST_EQUALS( "PERSPECTIVE_PROJECTION", sValue, TEST_LOCATION );
+ bool bValue;
+ actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS).Get( bValue );
+ DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
+ END_TEST;
+}
+
+int UtcDaliCameraActorSetCameraOnStage(void)
+{
+ TestApplication application;
+ tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
+
+ CameraActor actor = CameraActor::New();
+ Stage::GetCurrent().Add( actor );
+ application.Render( 0 );
+ application.SendNotification();
+
+ actor.SetType( Camera::LOOK_AT_TARGET );
+ actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
+ actor.SetAspectRatio( TEST_ASPECT_RATIO );
+ actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
+ actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
+ actor.SetInvertYAxis( false );
+
+ DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
+
+ // Will need 2 frames to ensure both buffers are set to same values:
+ application.Render();
+ application.SendNotification();
+ application.Render();
+ application.SendNotification();
+
+ DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
+ DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
+ DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
+ DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
+ DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
+
+ std::string sValue;
+ actor.GetProperty( CameraActor::Property::TYPE ).Get( sValue );
+ DALI_TEST_EQUALS( sValue, "LOOK_AT_TARGET", TEST_LOCATION );
+
+ float value;
+ actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
+ DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
+ actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
+ DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
+ actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
+ DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
+ actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value);
+ DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
+
+ bool bValue;
+ actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
+ DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
+ END_TEST;
+}
+
+int UtcDaliCameraActorGetCamera(void)
+{
+ TestApplication application;
+ tet_infoline( "Testing Dali::CameraActor::GetCamera()" );
+
+ CameraActor actor = CameraActor::New();
+
+ actor.SetAspectRatio( TEST_ASPECT_RATIO );
+
+ DALI_TEST_EQUALS( actor.GetAspectRatio(), TEST_ASPECT_RATIO, FLOAT_EPSILON, TEST_LOCATION );
+
+ actor.SetProperty( CameraActor::Property::TYPE, "FREE_LOOK" );
+ actor.SetProperty( CameraActor::Property::ASPECT_RATIO, TEST_ASPECT_RATIO );
+ actor.SetProperty( CameraActor::Property::FIELD_OF_VIEW, TEST_FIELD_OF_VIEW );
+ actor.SetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE, TEST_NEAR_PLANE_DISTANCE );
+ actor.SetProperty( CameraActor::Property::FAR_PLANE_DISTANCE, TEST_FAR_PLANE_DISTANCE );
+
+ DALI_TEST_EQUALS( Camera::FREE_LOOK, actor.GetType(), TEST_LOCATION );
+ DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
+ DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
+ DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
+ DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
+ END_TEST;
+}
+
+int UtcDaliCameraActorDefaultProperties(void)
+{
+ TestApplication application;
+ tet_infoline( "Testing Dali::CameraActor DefaultProperties" );
+
+ CameraActor actor = CameraActor::New();
+ Stage stage = Stage::GetCurrent();
+ stage.Add(actor);
+ stage.GetRenderTaskList().GetTask(0).SetCameraActor( actor );
+
+ actor.SetAspectRatio( TEST_ASPECT_RATIO );
+ Stage::GetCurrent().Add( actor );
+ application.Render( 0 );
+ application.SendNotification();
+ bool bValue;
+ actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
+ DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
+
+ std::vector<Property::Index> indices ;
+ indices.push_back( CameraActor::Property::TYPE );
+ indices.push_back( CameraActor::Property::PROJECTION_MODE );
+ indices.push_back( CameraActor::Property::FIELD_OF_VIEW );
+ indices.push_back( CameraActor::Property::ASPECT_RATIO );
+ indices.push_back( CameraActor::Property::NEAR_PLANE_DISTANCE );
+ indices.push_back( CameraActor::Property::FAR_PLANE_DISTANCE );
+ indices.push_back( CameraActor::Property::LEFT_PLANE_DISTANCE );
+ indices.push_back( CameraActor::Property::RIGHT_PLANE_DISTANCE );
+ indices.push_back( CameraActor::Property::TOP_PLANE_DISTANCE );
+ indices.push_back( CameraActor::Property::BOTTOM_PLANE_DISTANCE );
+ indices.push_back( CameraActor::Property::TARGET_POSITION );
+ indices.push_back( CameraActor::Property::PROJECTION_MATRIX );
+ indices.push_back( CameraActor::Property::VIEW_MATRIX );
+ indices.push_back( CameraActor::Property::INVERT_Y_AXIS );
+
+ DALI_TEST_CHECK( actor.GetPropertyCount() == ( Actor::New().GetPropertyCount() + indices.size() ) );
+
+ for( std::vector<Property::Index>::iterator iter = indices.begin(); iter != indices.end(); ++iter )
+ {
+ DALI_TEST_EQUALS( *iter, actor.GetPropertyIndex( actor.GetPropertyName( *iter ) ), TEST_LOCATION);
+ DALI_TEST_CHECK( !actor.IsPropertyAnimatable( *iter ) );
+
+ if ( ( *iter == CameraActor::Property::PROJECTION_MATRIX ) ||
+ ( *iter == CameraActor::Property::VIEW_MATRIX ) )
+ {
+ DALI_TEST_CHECK( !actor.IsPropertyWritable( *iter ) );
+ }
+ else
+ {
+ DALI_TEST_CHECK( actor.IsPropertyWritable( *iter ) );
+ }
+
+ DALI_TEST_CHECK( actor.GetPropertyType( *iter ) == actor.GetPropertyType( *iter ) ); // just checking call succeeds
+ }
+
+ // Set/Get one of them.
+ const float newAspect = TEST_ASPECT_RATIO * 2.0f;
+
+ actor.SetProperty( CameraActor::Property::ASPECT_RATIO, Property::Value( newAspect ) );
+ application.Render();
+ application.SendNotification();
+ application.Render();
+ application.SendNotification();
+
+ DALI_TEST_EQUALS( actor.GetAspectRatio(), newAspect, TEST_LOCATION );
+ END_TEST;
+}
+
+int UtcDaliCameraActorModelView(void)
+{
+ TestApplication application;
+ tet_infoline( "Testing Dali::CameraActor Test view application" );
+
+ BufferImage image = CreateBufferImage();
+
+ Actor actor = CreateRenderableActor(image);
+ actor.SetSize( 100.0f, 100.0f );
+ actor.SetPosition( 20.0f, 30.0f, 40.0f );
+ actor.SetParentOrigin( ParentOrigin::CENTER );
+ Stage::GetCurrent().Add( actor );
+
+ application.SendNotification();
+ application.Render( 0 );
+ application.Render();
+ application.SendNotification();
+
+ Matrix resultMatrix( true );
+ resultMatrix.SetTransformComponents( Vector3::ONE, Quaternion::IDENTITY, actor.GetCurrentPosition() );
+
+ RenderTask task = Stage::GetCurrent().GetRenderTaskList().GetTask( 0 );
+ CameraActor cameraActor = task.GetCameraActor();
+
+ Matrix viewMatrix( false );
+ cameraActor.GetProperty( CameraActor::Property::VIEW_MATRIX ).Get( viewMatrix );
+ Matrix::Multiply( resultMatrix, resultMatrix, viewMatrix );
+
+ DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( "uModelView", resultMatrix ) );
+ END_TEST;
+}