2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include <dali/public-api/dali-core.h>
23 #include <dali/devel-api/object/handle-devel.h>
25 #include "dali-test-suite-utils/dali-test-suite-utils.h"
29 void camera_actor_test_startup(void)
31 test_return_value = TET_UNDEF;
34 void camera_actor_test_cleanup(void)
36 test_return_value = TET_PASS;
42 const float FLOAT_EPSILON = 0.001f;
43 const float TEST_ASPECT_RATIO = 0.123f;
44 const float TEST_FIELD_OF_VIEW = Radian(Degree(40.0f));
45 const float TEST_NEAR_PLANE_DISTANCE = 0.23f;
46 const float TEST_FAR_PLANE_DISTANCE = 0.973f;
48 const std::string SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME( "uLightCameraProjectionMatrix" );
49 const std::string SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME( "uLightCameraViewMatrix" );
50 const char* const RENDER_SHADOW_VERTEX_SOURCE =
51 " uniform mediump mat4 uLightCameraProjectionMatrix;\n"
52 " uniform mediump mat4 uLightCameraViewMatrix;\n"
56 " gl_Position = uProjection * uModelView * vec4(aPosition,1.0);\n"
57 " vec4 textureCoords = uLightCameraProjectionMatrix * uLightCameraViewMatrix * uModelMatrix * vec4(aPosition,1.0);\n"
58 " vTexCoord = 0.5 + 0.5 * (textureCoords.xy/textureCoords.w);\n"
61 const char* const RENDER_SHADOW_FRAGMENT_SOURCE =
62 "uniform lowp vec4 uShadowColor;\n"
65 " lowp float alpha;\n"
66 " alpha = texture2D(sTexture, vec2(vTexCoord.x, vTexCoord.y)).a;\n"
67 " gl_FragColor = vec4(uShadowColor.rgb, uShadowColor.a * alpha);\n"
70 } // Anonymous namespace
73 int UtcDaliCameraActorConstructorP(void)
75 TestApplication application;
76 tet_infoline( "Testing Dali::CameraActor::CameraActor()" );
80 DALI_TEST_CHECK( !actor );
84 // Note: No negative test for UtcDaliCameraActorConstructor.
86 int UtcDaliCameraActorDestructorP(void)
88 TestApplication application;
89 tet_infoline( "Testing Dali::~CameraActor (P)" );
90 CameraActor* actor = new CameraActor();
94 DALI_TEST_CHECK( true );
98 // Note: No negative test for UtcDaliCameraActorDestructor.
100 int UtcDaliCameraActorCopyConstructorP(void)
102 TestApplication application;
103 tet_infoline( "Testing Dali::CameraActor Copy Constructor (P)" );
104 CameraActor actor = CameraActor::New();
106 CameraActor copyActor( actor );
108 DALI_TEST_CHECK( copyActor );
109 DALI_TEST_CHECK( copyActor == actor );
114 int UtcDaliCameraActorCopyConstructorN(void)
116 TestApplication application;
117 tet_infoline( "Testing Dali::CameraActor Copy Constructor (N)" );
120 CameraActor copyActor( actor );
122 DALI_TEST_CHECK( !copyActor );
127 int UtcDaliCameraActorAssignmentOperatorP(void)
129 TestApplication application;
130 tet_infoline( "Testing Dali::CameraActor Assignment Operator (P)" );
131 const CameraActor actor = CameraActor::New();
133 CameraActor copyActor = actor;
135 DALI_TEST_CHECK( copyActor );
136 DALI_TEST_CHECK( copyActor == actor );
141 int UtcDaliCameraActorAssignmentOperatorN(void)
143 TestApplication application;
144 tet_infoline( "Testing Dali::CameraActor = (N)" );
147 CameraActor copyActor = actor;
149 DALI_TEST_CHECK( !copyActor );
154 int UtcDaliCameraActorNewP(void)
156 TestApplication application;
157 tet_infoline( "Testing Dali::CameraActor::New (P)" );
159 CameraActor actor = CameraActor::New();
161 DALI_TEST_CHECK( actor );
165 DALI_TEST_CHECK( !actor );
169 // Note: No negative test for UtcDaliCameraActorNew.
171 int UtcDaliCameraActorDownCastP(void)
173 TestApplication application;
174 tet_infoline( "Testing Dali::CameraActor::DownCast (P)" );
176 CameraActor camera = CameraActor::New();
177 Actor anActor = Actor::New();
178 anActor.Add( camera );
180 Actor child = anActor.GetChildAt( 0 );
181 CameraActor cameraActor = CameraActor::DownCast( child );
182 DALI_TEST_CHECK( cameraActor );
185 DALI_TEST_CHECK( !cameraActor );
187 cameraActor = DownCast< CameraActor >( child );
188 DALI_TEST_CHECK( cameraActor );
192 int UtcDaliCameraActorDownCastN(void)
194 TestApplication application;
195 tet_infoline( "Testing Dali::CameraActor::DownCast (N)" );
197 Actor actor1 = Actor::New();
198 Actor anActor = Actor::New();
199 anActor.Add( actor1 );
201 Actor child = anActor.GetChildAt( 0 );
202 CameraActor cameraActor = CameraActor::DownCast( child );
203 DALI_TEST_CHECK( !cameraActor );
205 Actor unInitialzedActor;
206 cameraActor = CameraActor::DownCast( unInitialzedActor );
207 DALI_TEST_CHECK( !cameraActor );
209 cameraActor = DownCast< CameraActor >( unInitialzedActor );
210 DALI_TEST_CHECK( !cameraActor );
214 // Note: SetType and GetType are tested within the same test cases.
216 int UtcDaliCameraActorSetGetTypeP(void)
218 TestApplication application;
219 tet_infoline( "Testing Dali::CameraActor GetType (P)" );
221 CameraActor actor = CameraActor::New();
222 DALI_TEST_EQUALS( actor.GetType(), Dali::Camera::FREE_LOOK, TEST_LOCATION );
224 actor.SetType( Dali::Camera::LOOK_AT_TARGET );
225 DALI_TEST_EQUALS( actor.GetType(), Dali::Camera::LOOK_AT_TARGET, TEST_LOCATION );
227 DALI_TEST_EQUALS( "LOOK_AT_TARGET", actor.GetProperty< std::string >( CameraActor::Property::TYPE ), TEST_LOCATION );
228 DALI_TEST_EQUALS( "LOOK_AT_TARGET", DevelHandle::GetCurrentProperty< std::string >( actor, CameraActor::Property::TYPE ), TEST_LOCATION );
232 int UtcDaliCameraActorSetGetTypeN(void)
234 TestApplication application;
235 tet_infoline( "Testing Dali::CameraActor GetType (N)" );
239 Dali::Camera::Type cameraType = Dali::Camera::FREE_LOOK;
242 cameraType = actor.GetType();
244 catch ( Dali::DaliException& e )
246 DALI_TEST_PRINT_ASSERT( e );
247 DALI_TEST_ASSERT( e, "camera", TEST_LOCATION );
250 const CameraActor aConstActor;
254 cameraType = aConstActor.GetType();
256 catch ( Dali::DaliException& e )
258 DALI_TEST_PRINT_ASSERT( e );
259 DALI_TEST_ASSERT( e, "camera", TEST_LOCATION );
262 DALI_TEST_EQUALS( cameraType, Dali::Camera::FREE_LOOK, TEST_LOCATION );
266 int UtcDaliCameraActorSetFieldOfViewP(void)
268 TestApplication application;
269 tet_infoline( "Testing Dali::CameraActor Set Field of view (P)" );
271 CameraActor defaultCamera = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
272 const float defaultFieldOfView = defaultCamera.GetFieldOfView();
274 CameraActor actor = CameraActor::New();
275 DALI_TEST_EQUALS( actor.GetFieldOfView(), defaultFieldOfView, TEST_LOCATION );
277 float fieldOfView = Math::PI / 3.0f;
278 actor.SetFieldOfView( fieldOfView );
279 DALI_TEST_EQUALS( actor.GetFieldOfView(), fieldOfView, TEST_LOCATION );
282 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
283 DALI_TEST_EQUALS( fieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
287 int UtcDaliCameraActorSetFieldOfViewN(void)
289 TestApplication application;
290 tet_infoline( "Testing Dali::CameraActor Set Field of view (N)" );
292 CameraActor defaultCamera = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
293 const float defaultFieldOfView = defaultCamera.GetFieldOfView();
295 CameraActor actor = CameraActor::New();
296 DALI_TEST_EQUALS( actor.GetFieldOfView(), defaultFieldOfView, TEST_LOCATION );
298 float fieldOfView = Math::PI / 3.0f;
299 actor.SetFieldOfView( fieldOfView );
300 DALI_TEST_EQUALS( actor.GetFieldOfView(), fieldOfView, TEST_LOCATION );
303 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
304 DALI_TEST_EQUALS( fieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
308 int UtcDaliCameraActorGetFieldOfViewP(void)
310 TestApplication application;
311 tet_infoline( "Testing Dali::CameraActor Get Field of view (P)" );
312 const Vector2 size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT );
314 CameraActor defaultCamera = CameraActor::New( size );
316 const float cameraZ = 2.0f * std::max( size.width, size.height );
317 const float expectedFieldOfView = 2.0f * std::atan( size.height * 0.5f / cameraZ );
319 CameraActor actor = CameraActor::New();
320 DALI_TEST_EQUALS( actor.GetFieldOfView(), expectedFieldOfView, TEST_LOCATION );
323 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
324 DALI_TEST_EQUALS( expectedFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
328 int UtcDaliCameraActorGetFieldOfViewN(void)
330 TestApplication application;
331 tet_infoline( "Testing Dali::CameraActor Get Field of view (N)" );
333 CameraActor defaultCamera = CameraActor::New();
335 bool asserted = true;
338 defaultCamera.GetFieldOfView();
340 catch( Dali::DaliException& e )
342 DALI_TEST_PRINT_ASSERT( e );
343 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
346 DALI_TEST_CHECK( asserted );
351 int UtcDaliCameraActorSetAspectRatioP(void)
353 TestApplication application;
354 tet_infoline( "Testing Dali::CameraActor Set Aspect Ratio (P)" );
356 CameraActor actor = CameraActor::New();
357 DALI_TEST_EQUALS( actor.GetAspectRatio(), static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT ), TEST_LOCATION );
359 // Set an initial value to confirm a further set changes it.
360 float aspect = 4.0f / 3.0f;
361 actor.SetAspectRatio( aspect );
362 DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
364 aspect = 16.0f / 9.0f;
365 actor.SetAspectRatio( aspect );
366 DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
371 int UtcDaliCameraActorSetAspectRatioN(void)
373 TestApplication application;
374 tet_infoline( "Testing Dali::CameraActor Set Aspect Ratio (N)" );
378 bool asserted = true;
381 actor.SetAspectRatio( 16.0f / 9.0f );
383 catch( Dali::DaliException& e )
385 DALI_TEST_PRINT_ASSERT( e );
386 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
389 DALI_TEST_CHECK( asserted );
394 int UtcDaliCameraActorGetAspectRatioP(void)
396 TestApplication application;
397 tet_infoline("Testing Dali::CameraActor Get Aspect Ratio");
399 CameraActor actor = CameraActor::New();
400 float defaultAspect = static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT );
402 DALI_TEST_EQUALS( actor.GetAspectRatio(), defaultAspect, TEST_LOCATION );
405 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
406 DALI_TEST_EQUALS( defaultAspect, value, FLOAT_EPSILON, TEST_LOCATION );
411 int UtcDaliCameraActorGetAspectRatioN(void)
413 TestApplication application;
414 tet_infoline( "Testing Dali::CameraActor Get Aspect Ratio (N)" );
418 bool asserted = true;
421 actor.GetAspectRatio();
423 catch( Dali::DaliException& e )
425 DALI_TEST_PRINT_ASSERT( e );
426 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
430 DALI_TEST_CHECK( asserted );
435 int UtcDaliCameraActorSetNearClippingPlaneP(void)
437 TestApplication application;
438 tet_infoline( "Testing Dali::CameraActor Set Near clipping plane (P)" );
440 CameraActor actor = CameraActor::New();
442 // Set a value so we are not relying on a particular default for this test case.
443 actor.SetNearClippingPlane( 200.0f );
444 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, TEST_LOCATION );
446 actor.SetNearClippingPlane( 400.0f );
447 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 400.0f, TEST_LOCATION );
449 // Check setting the property.
450 actor.SetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE, Property::Value( 300.0f ) );
451 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 300.0f, FLOAT_EPSILON, TEST_LOCATION );
455 int UtcDaliCameraActorSetNearClippingPlaneN(void)
457 TestApplication application;
458 tet_infoline( "Testing Dali::CameraActor Set Near clipping plane (N)" );
462 bool asserted = true;
465 actor.SetNearClippingPlane( 200.0f );
467 catch( Dali::DaliException& e )
469 DALI_TEST_PRINT_ASSERT( e );
470 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
474 DALI_TEST_CHECK( asserted );
479 int UtcDaliCameraActorGetNearClippingPlaneP(void)
481 TestApplication application;
482 tet_infoline( "Testing Dali::CameraActor Get Near clipping plane (P)" );
484 // Check the default value.
485 CameraActor actor = CameraActor::New();
486 float defaultValue = 800.0f;
487 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), defaultValue, TEST_LOCATION );
489 // Check getting the property.
491 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
492 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
496 int UtcDaliCameraActorGetNearClippingPlaneN(void)
498 TestApplication application;
499 tet_infoline( "Testing Dali::CameraActor Get Near clipping plane (N)" );
502 bool asserted = true;
505 actor.GetNearClippingPlane();
507 catch( Dali::DaliException& e )
509 DALI_TEST_PRINT_ASSERT( e );
510 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
514 DALI_TEST_CHECK( asserted );
519 int UtcDaliCameraActorSetFarClippingPlaneP(void)
521 TestApplication application;
522 tet_infoline( "Testing Dali::CameraActor Set Far clipping plane (P)" );
524 CameraActor actor = CameraActor::New();
526 // Set a value so we are not relying on a particular default for this test case.
527 actor.SetFarClippingPlane( 2000.0f );
528 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 2000.0f, TEST_LOCATION );
530 actor.SetFarClippingPlane( 4000.0f );
531 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 4000.0f, TEST_LOCATION );
533 // Check setting the property.
534 actor.SetProperty( CameraActor::Property::FAR_PLANE_DISTANCE, 2000.0f );
535 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 2000.0f, FLOAT_EPSILON, TEST_LOCATION );
539 int UtcDaliCameraActorSetFarClippingPlaneN(void)
541 TestApplication application;
542 tet_infoline( "Testing Dali::CameraActor Set Far clipping plane (N)" );
546 bool asserted = true;
549 actor.SetFarClippingPlane( 2000.0f );
551 catch( Dali::DaliException& e )
553 DALI_TEST_PRINT_ASSERT( e );
554 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
558 DALI_TEST_CHECK( asserted );
563 int UtcDaliCameraActorGetFarClippingPlaneP(void)
565 TestApplication application;
566 tet_infoline( "Testing Dali::CameraActor Get Far clipping plane (P)" );
568 CameraActor actor = CameraActor::New();
569 float defaultValue = 800.0f + ( 0xFFFF >> 4 );
570 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), defaultValue, TEST_LOCATION );
572 // Check getting the property.
574 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
575 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
579 int UtcDaliCameraActorGetFarClippingPlaneN(void)
581 TestApplication application;
582 tet_infoline( "Testing Dali::CameraActor Get Far clipping plane (N)" );
586 bool asserted = true;
589 actor.GetFarClippingPlane();
591 catch( Dali::DaliException& e )
593 DALI_TEST_PRINT_ASSERT( e );
594 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
598 DALI_TEST_CHECK( asserted );
603 int UtcDaliCameraActorSetTargetPositionP(void)
605 TestApplication application;
606 tet_infoline( "Testing Dali::CameraActor Set Target Position (P)" );
608 CameraActor actor = CameraActor::New();
610 Vector3 target1( 10.0f, 20.0f, 30.0f );
611 Vector3 target2( 15.0f, 25.0f, 35.0f );
613 // Set a value so we are not relying on a particular default for this test case.
614 actor.SetTargetPosition( target1 );
615 DALI_TEST_EQUALS( actor.GetTargetPosition(), target1, TEST_LOCATION );
617 actor.SetTargetPosition( target2 );
618 DALI_TEST_EQUALS( actor.GetTargetPosition(), target2, TEST_LOCATION );
620 // Check setting the property.
621 actor.SetProperty( CameraActor::Property::TARGET_POSITION, target1 );
622 DALI_TEST_EQUALS( actor.GetTargetPosition(), target1, FLOAT_EPSILON, TEST_LOCATION );
626 int UtcDaliCameraActorSetTargetPositionN(void)
628 TestApplication application;
629 tet_infoline( "Testing Dali::CameraActor Set Target Position (N)" );
633 bool asserted = true;
636 actor.SetTargetPosition( Vector3( 10.0f, 20.0f, 30.0f ) );
638 catch( Dali::DaliException& e )
640 DALI_TEST_PRINT_ASSERT( e );
641 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
644 DALI_TEST_CHECK( asserted );
649 int UtcDaliCameraActorGetTargetPositionP(void)
651 TestApplication application;
652 tet_infoline( "Testing Dali::CameraActor Get Target Position (P)" );
654 CameraActor actor = CameraActor::New();
655 Vector3 defaultValue( Vector3::ZERO );
656 DALI_TEST_EQUALS( actor.GetTargetPosition(), defaultValue, TEST_LOCATION );
658 // Check getting the property.
660 actor.GetProperty( CameraActor::Property::TARGET_POSITION ).Get( value );
661 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
665 int UtcDaliCameraActorGetTargetPositionN(void)
667 TestApplication application;
668 tet_infoline( "Testing Dali::CameraActor Get Target Position (N)" );
672 bool asserted = true;
675 actor.GetTargetPosition();
677 catch( Dali::DaliException& e )
679 DALI_TEST_PRINT_ASSERT( e );
680 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
683 DALI_TEST_CHECK( asserted );
688 int UtcDaliCameraActorSetInvertYAxisP(void)
690 TestApplication application;
691 tet_infoline( "Testing Dali::CameraActor Set InvertYAxis (P)" );
693 CameraActor actor = CameraActor::New();
695 // Set a value so we are not relying on a particular default for this test case.
696 actor.SetInvertYAxis( false );
697 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
699 actor.SetInvertYAxis( true );
700 DALI_TEST_EQUALS( actor.GetInvertYAxis(), true, TEST_LOCATION );
702 actor.SetProperty( CameraActor::Property::INVERT_Y_AXIS, false );
703 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
707 int UtcDaliCameraActorSetInvertYAxisN(void)
709 TestApplication application;
710 tet_infoline( "Testing Dali::CameraActor Set InvertYAxis (N)" );
714 bool asserted = true;
717 actor.SetInvertYAxis( false );
719 catch( Dali::DaliException& e )
721 DALI_TEST_PRINT_ASSERT( e );
722 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
725 DALI_TEST_CHECK( asserted );
729 int UtcDaliCameraActorGetInvertYAxisP(void)
731 TestApplication application;
732 tet_infoline( "Testing Dali::CameraActor Get InvertYAxis (P)" );
734 // Check the default value.
735 CameraActor actor = CameraActor::New();
736 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
738 // Check getting the property.
740 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
741 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
745 int UtcDaliCameraActorGetInvertYAxisN(void)
747 TestApplication application;
748 tet_infoline( "Testing Dali::CameraActor Get InvertYAxis (N)" );
752 bool asserted = true;
755 actor.GetInvertYAxis();
757 catch( Dali::DaliException& e )
759 DALI_TEST_PRINT_ASSERT( e );
760 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
763 DALI_TEST_CHECK( asserted );
767 int UtcDaliCameraActorSetPerspectiveProjectionP(void)
769 TestApplication application;
770 tet_infoline( "Testing Dali::CameraActor::SetPerspectiveProjection (P)" );
772 CameraActor actor = CameraActor::New();
773 actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
775 DALI_TEST_CHECK( actor );
778 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
779 DALI_TEST_EQUALS( 0.666666f, value, FLOAT_EPSILON, TEST_LOCATION );
780 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
781 DALI_TEST_EQUALS( 0.489957f, value, FLOAT_EPSILON, TEST_LOCATION );
782 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
783 DALI_TEST_EQUALS( 150.f, value, FLOAT_EPSILON, TEST_LOCATION );
784 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
785 DALI_TEST_EQUALS( 4245.f, value, FLOAT_EPSILON, TEST_LOCATION );
787 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
792 int UtcDaliCameraActorSetPerspectiveProjectionN(void)
794 TestApplication application;
795 tet_infoline( "Testing Dali::CameraActor::SetPerspectiveProjection (N)" );
797 Stage stage = Stage::GetCurrent();
798 Vector2 stageSize = stage.GetSize();
800 CameraActor actor = CameraActor::New();
802 // Check that setting perspective projection without a size (using zero size) uses the stages size.
803 actor.SetPerspectiveProjection( Size::ZERO );
805 float nearClippingPlane = std::max( stageSize.width, stageSize.height );
806 float farClippingPlane = nearClippingPlane + static_cast<float>( 0xFFFF >> 4 );
808 DALI_TEST_EQUALS( nearClippingPlane, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
809 DALI_TEST_EQUALS( farClippingPlane, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
810 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
815 int UtcDaliCameraActorSetOrthographicProjectionP1(void)
817 TestApplication application;
818 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,1)" );
820 CameraActor actor = CameraActor::New( Size( 1080.0f, 1920.0f ) );
821 DALI_TEST_CHECK( actor );
823 Stage::GetCurrent().Add( actor );
825 actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
826 application.SendNotification();
827 application.Render( 0 );
828 application.Render();
829 application.SendNotification();
831 float defaultAspectRatio;
832 float defaultFieldOfView;
833 float defaultNearPlaneDistance;
834 float defaultFarPlaneDistance;
835 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
836 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
837 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
838 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
839 Vector3 defaultPos = actor.GetCurrentPosition();
841 actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
843 application.SendNotification();
844 application.Render( 0 );
845 application.Render();
846 application.SendNotification();
849 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
850 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
851 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
852 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
853 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
854 DALI_TEST_EQUALS( defaultNearPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION );
855 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
856 DALI_TEST_EQUALS( defaultFarPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION );
858 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
859 DALI_TEST_EQUALS( -540.0f, value, FLOAT_EPSILON, TEST_LOCATION );
860 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
861 DALI_TEST_EQUALS( 540.0f, value, FLOAT_EPSILON, TEST_LOCATION );
862 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
863 DALI_TEST_EQUALS( 960.0f, value, FLOAT_EPSILON, TEST_LOCATION );
864 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
865 DALI_TEST_EQUALS( -960.0f, value, FLOAT_EPSILON, TEST_LOCATION );
867 Vector3 pos = actor.GetCurrentPosition();
868 DALI_TEST_EQUALS( defaultPos.z, pos.z, 0.001f, TEST_LOCATION );
870 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
874 int UtcDaliCameraActorSetOrthographicProjectionN(void)
876 TestApplication application;
877 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (N)" );
880 bool asserted = true;
883 actor.GetProjectionMode();
885 catch( Dali::DaliException& e )
887 DALI_TEST_PRINT_ASSERT( e );
888 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
891 DALI_TEST_CHECK( asserted );
895 int UtcDaliCameraActorSetOrthographicProjectionP2(void)
897 TestApplication application;
898 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,2)" );
900 CameraActor actor = CameraActor::New();
901 DALI_TEST_CHECK( actor );
903 float defaultAspectRatio;
904 float defaultFieldOfView;
905 float defaultNearPlaneDistance;
906 float defaultFarPlaneDistance;
907 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
908 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
909 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
910 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
912 // Check setting with specific near and far plane distances.
913 actor.SetOrthographicProjection( -100.0f, 200.0f, -300.0f, 500.0f, 400.0f, 4000.0f );
916 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
917 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
918 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
919 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
920 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
921 DALI_TEST_EQUALS( 400.0f, value, FLOAT_EPSILON, TEST_LOCATION );
922 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
923 DALI_TEST_EQUALS( 4000.0f, value, FLOAT_EPSILON, TEST_LOCATION );
925 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
926 DALI_TEST_EQUALS( -100.0f, value, FLOAT_EPSILON, TEST_LOCATION );
927 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
928 DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION );
929 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
930 DALI_TEST_EQUALS( -300.0f, value, FLOAT_EPSILON, TEST_LOCATION );
931 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
932 DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION );
934 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
939 int UtcDaliCameraActorSetOrthographicProjectionP3(void)
941 TestApplication application;
942 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,3)" );
944 CameraActor actor = CameraActor::New();
945 DALI_TEST_CHECK( actor );
947 float defaultAspectRatio;
948 float defaultFieldOfView;
949 float defaultNearPlaneDistance;
950 float defaultFarPlaneDistance;
951 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
952 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
953 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
954 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
956 actor.SetProjectionMode( Dali::Camera::ORTHOGRAPHIC_PROJECTION );
958 actor.SetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE, -100.0f );
959 actor.SetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE, 200.0f );
960 actor.SetProperty( CameraActor::Property::TOP_PLANE_DISTANCE, -300.0f );
961 actor.SetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE, 500.0f );
962 actor.SetNearClippingPlane( 400.0f );
963 actor.SetFarClippingPlane( 4000.0f );
966 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
967 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
968 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
969 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
970 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
971 DALI_TEST_EQUALS( 400.0f, value, FLOAT_EPSILON, TEST_LOCATION );
972 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
973 DALI_TEST_EQUALS( 4000.0f, value, FLOAT_EPSILON, TEST_LOCATION );
975 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
976 DALI_TEST_EQUALS( -100.0f, value, FLOAT_EPSILON, TEST_LOCATION );
977 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
978 DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION );
979 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
980 DALI_TEST_EQUALS( -300.0f, value, FLOAT_EPSILON, TEST_LOCATION );
981 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
982 DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION );
984 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
985 std::string stringValue;
986 actor.GetProperty( CameraActor::Property::PROJECTION_MODE ).Get( stringValue );
987 DALI_TEST_EQUALS( stringValue, "ORTHOGRAPHIC_PROJECTION", TEST_LOCATION );
991 int UtcDaliCameraActorSetProjectionModeP(void)
993 TestApplication application;
994 tet_infoline( "Testing Dali::CameraActor::SetProjectionModeP (P)" );
996 CameraActor actor = CameraActor::New();
998 // Check that changing the projection mode alone does not alter other presets.
999 actor.SetNearClippingPlane( 200.0f );
1000 actor.SetFarClippingPlane( 400.0f );
1002 actor.SetProjectionMode( Dali::Camera::PERSPECTIVE_PROJECTION );
1004 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1005 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION );
1006 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION );
1008 actor.SetProjectionMode( Dali::Camera::ORTHOGRAPHIC_PROJECTION );
1010 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1011 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION );
1012 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION );
1014 // Check setting the property.
1015 Property::Value setValue = "PERSPECTIVE_PROJECTION";
1016 actor.SetProperty( CameraActor::Property::PROJECTION_MODE, setValue );
1017 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1021 int UtcDaliCameraActorSetProjectionModeN(void)
1023 TestApplication application;
1024 tet_infoline( "Testing Dali::CameraActor::SetProjectionModeP (N)" );
1028 bool asserted = true;
1031 actor.SetProjectionMode( Dali::Camera::PERSPECTIVE_PROJECTION );
1033 catch( Dali::DaliException& e )
1035 DALI_TEST_PRINT_ASSERT( e );
1036 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
1039 DALI_TEST_CHECK( asserted );
1043 int UtcDaliCameraActorGetProjectionModeP(void)
1045 TestApplication application;
1046 tet_infoline( "Testing Dali::CameraActor::GetPerspectiveProjection (P)" );
1048 CameraActor actor = CameraActor::New();
1050 actor.SetOrthographicProjection( Size::ONE );
1051 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1053 actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
1054 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1056 // Check getting the property.
1057 std::string stringValue;
1058 actor.GetProperty( CameraActor::Property::PROJECTION_MODE ).Get( stringValue );
1059 DALI_TEST_EQUALS( stringValue, "PERSPECTIVE_PROJECTION", TEST_LOCATION );
1063 int UtcDaliCameraActorGetProjectionModeN(void)
1065 TestApplication application;
1066 tet_infoline( "Testing Dali::CameraActor::GetProjectionMode (N)" );
1070 bool asserted = true;
1073 actor.GetProjectionMode();
1075 catch( Dali::DaliException& e )
1077 DALI_TEST_PRINT_ASSERT( e );
1078 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
1081 DALI_TEST_CHECK( asserted );
1085 int UtcDaliCameraActorSetCameraOffStage(void)
1087 TestApplication application;
1088 tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
1090 CameraActor actor = CameraActor::New();
1092 actor.SetType( Camera::FREE_LOOK );
1093 actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
1094 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1095 actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
1096 actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
1097 actor.SetProjectionMode( Camera::PERSPECTIVE_PROJECTION );
1099 actor.SetInvertYAxis( false );
1101 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );//change to machine epsilon
1102 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1103 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1104 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1105 DALI_TEST_EQUALS( Camera::PERSPECTIVE_PROJECTION, actor.GetProjectionMode(), TEST_LOCATION );
1106 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1110 actor.GetProperty( CameraActor::Property::ASPECT_RATIO).Get( value );
1111 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
1112 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW).Get( value );
1113 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
1114 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE).Get( value );
1115 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1116 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE).Get( value );
1117 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1118 actor.GetProperty( CameraActor::Property::PROJECTION_MODE).Get( sValue );
1119 DALI_TEST_EQUALS( "PERSPECTIVE_PROJECTION", sValue, TEST_LOCATION );
1121 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS).Get( bValue );
1122 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1126 int UtcDaliCameraActorSetCameraOnStage(void)
1128 TestApplication application;
1129 tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
1131 CameraActor actor = CameraActor::New();
1132 Stage::GetCurrent().Add( actor );
1133 application.Render( 0 );
1134 application.SendNotification();
1136 actor.SetType( Camera::LOOK_AT_TARGET );
1137 actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
1138 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1139 actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
1140 actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
1141 actor.SetInvertYAxis( false );
1143 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1145 // Will need 2 frames to ensure both buffers are set to same values:
1146 application.Render();
1147 application.SendNotification();
1148 application.Render();
1149 application.SendNotification();
1151 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
1152 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1153 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1154 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1155 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1158 actor.GetProperty( CameraActor::Property::TYPE ).Get( sValue );
1159 DALI_TEST_EQUALS( sValue, "LOOK_AT_TARGET", TEST_LOCATION );
1162 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
1163 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
1164 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
1165 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
1166 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
1167 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1168 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value);
1169 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1172 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
1173 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1177 int UtcDaliCameraActorGetCamera(void)
1179 TestApplication application;
1180 tet_infoline( "Testing Dali::CameraActor::GetCamera()" );
1182 CameraActor actor = CameraActor::New();
1184 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1186 DALI_TEST_EQUALS( actor.GetAspectRatio(), TEST_ASPECT_RATIO, FLOAT_EPSILON, TEST_LOCATION );
1188 actor.SetProperty( CameraActor::Property::TYPE, "FREE_LOOK" );
1189 actor.SetProperty( CameraActor::Property::ASPECT_RATIO, TEST_ASPECT_RATIO );
1190 actor.SetProperty( CameraActor::Property::FIELD_OF_VIEW, TEST_FIELD_OF_VIEW );
1191 actor.SetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE, TEST_NEAR_PLANE_DISTANCE );
1192 actor.SetProperty( CameraActor::Property::FAR_PLANE_DISTANCE, TEST_FAR_PLANE_DISTANCE );
1194 DALI_TEST_EQUALS( Camera::FREE_LOOK, actor.GetType(), TEST_LOCATION );
1195 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
1196 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1197 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1198 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1202 int UtcDaliCameraActorDefaultProperties(void)
1204 TestApplication application;
1205 tet_infoline( "Testing Dali::CameraActor DefaultProperties" );
1207 CameraActor actor = CameraActor::New();
1208 Stage stage = Stage::GetCurrent();
1210 stage.GetRenderTaskList().GetTask(0).SetCameraActor( actor );
1212 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1213 Stage::GetCurrent().Add( actor );
1214 application.Render( 0 );
1215 application.SendNotification();
1217 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
1218 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1220 std::vector<Property::Index> indices ;
1221 indices.push_back( CameraActor::Property::TYPE );
1222 indices.push_back( CameraActor::Property::PROJECTION_MODE );
1223 indices.push_back( CameraActor::Property::FIELD_OF_VIEW );
1224 indices.push_back( CameraActor::Property::ASPECT_RATIO );
1225 indices.push_back( CameraActor::Property::NEAR_PLANE_DISTANCE );
1226 indices.push_back( CameraActor::Property::FAR_PLANE_DISTANCE );
1227 indices.push_back( CameraActor::Property::LEFT_PLANE_DISTANCE );
1228 indices.push_back( CameraActor::Property::RIGHT_PLANE_DISTANCE );
1229 indices.push_back( CameraActor::Property::TOP_PLANE_DISTANCE );
1230 indices.push_back( CameraActor::Property::BOTTOM_PLANE_DISTANCE );
1231 indices.push_back( CameraActor::Property::TARGET_POSITION );
1232 indices.push_back( CameraActor::Property::PROJECTION_MATRIX );
1233 indices.push_back( CameraActor::Property::VIEW_MATRIX );
1234 indices.push_back( CameraActor::Property::INVERT_Y_AXIS );
1236 DALI_TEST_CHECK( actor.GetPropertyCount() == ( Actor::New().GetPropertyCount() + indices.size() ) );
1238 for( std::vector<Property::Index>::iterator iter = indices.begin(); iter != indices.end(); ++iter )
1240 DALI_TEST_EQUALS( *iter, actor.GetPropertyIndex( actor.GetPropertyName( *iter ) ), TEST_LOCATION);
1241 DALI_TEST_CHECK( !actor.IsPropertyAnimatable( *iter ) );
1243 if ( ( *iter == CameraActor::Property::PROJECTION_MATRIX ) ||
1244 ( *iter == CameraActor::Property::VIEW_MATRIX ) )
1246 DALI_TEST_CHECK( !actor.IsPropertyWritable( *iter ) );
1250 DALI_TEST_CHECK( actor.IsPropertyWritable( *iter ) );
1253 DALI_TEST_CHECK( actor.GetPropertyType( *iter ) == actor.GetPropertyType( *iter ) ); // just checking call succeeds
1256 // Set/Get one of them.
1257 const float newAspect = TEST_ASPECT_RATIO * 2.0f;
1259 actor.SetProperty( CameraActor::Property::ASPECT_RATIO, Property::Value( newAspect ) );
1260 application.Render();
1261 application.SendNotification();
1262 application.Render();
1263 application.SendNotification();
1265 DALI_TEST_EQUALS( actor.GetAspectRatio(), newAspect, TEST_LOCATION );
1269 int UtcDaliCameraActorModelView(void)
1271 TestApplication application;
1272 tet_infoline( "Testing Dali::CameraActor Test view application" );
1274 BufferImage image = CreateBufferImage();
1276 Actor actor = CreateRenderableActor(image);
1277 actor.SetSize( 100.0f, 100.0f );
1278 actor.SetPosition( 20.0f, 30.0f, 40.0f );
1279 actor.SetParentOrigin( ParentOrigin::CENTER );
1280 Stage::GetCurrent().Add( actor );
1282 application.SendNotification();
1283 application.Render( 0 );
1284 application.Render();
1285 application.SendNotification();
1287 Matrix resultMatrix( true );
1288 resultMatrix.SetTransformComponents( Vector3::ONE, Quaternion::IDENTITY, actor.GetCurrentPosition() );
1290 RenderTask task = Stage::GetCurrent().GetRenderTaskList().GetTask( 0 );
1291 CameraActor cameraActor = task.GetCameraActor();
1293 Matrix viewMatrix( false );
1294 cameraActor.GetProperty( CameraActor::Property::VIEW_MATRIX ).Get( viewMatrix );
1295 Matrix::Multiply( resultMatrix, resultMatrix, viewMatrix );
1297 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( "uModelView", resultMatrix ) );
1301 int UtcDaliCameraActorReadProjectionMatrix(void)
1303 TestApplication application;
1304 tet_infoline( "Testing Dali::CameraActor::ReadProjectionMatrix()" );
1306 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1307 application.SendNotification();
1308 application.Render( 0 );
1309 application.Render();
1310 application.SendNotification();
1311 Image image = CreateBufferImage();
1312 Actor actor = CreateRenderableActor( image, RENDER_SHADOW_VERTEX_SOURCE, RENDER_SHADOW_FRAGMENT_SOURCE );
1313 actor.SetSize( 100.0f, 100.0f );
1314 Stage::GetCurrent().Add( actor );
1316 Matrix projectionMatrix;
1319 camera.GetProperty( CameraActor::CameraActor::Property::PROJECTION_MATRIX ).Get( projectionMatrix );
1320 camera.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( viewMatrix );
1322 actor.RegisterProperty( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
1323 actor.RegisterProperty( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
1325 Property::Index projectionMatrixPropertyIndex = actor.GetPropertyIndex( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME );
1326 Property::Index viewMatrixPropertyIndex = actor.GetPropertyIndex( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME );
1328 Constraint projectionMatrixConstraint = Constraint::New<Dali::Matrix>( actor, projectionMatrixPropertyIndex, EqualToConstraint() );
1329 projectionMatrixConstraint.AddSource( Source( camera, CameraActor::Property::PROJECTION_MATRIX ) );
1330 Constraint viewMatrixConstraint = Constraint::New<Dali::Matrix>( actor, viewMatrixPropertyIndex, EqualToConstraint() );
1331 viewMatrixConstraint.AddSource( Source( camera, CameraActor::Property::VIEW_MATRIX ) );
1333 projectionMatrixConstraint.Apply();
1334 viewMatrixConstraint.Apply();
1336 application.SendNotification();
1337 application.Render();
1339 // Test effects of Constraint.
1340 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME.c_str(), projectionMatrix) );
1342 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME.c_str(), viewMatrix ) );
1346 int UtcDaliCameraActorAnimatedProperties(void)
1348 TestApplication application;
1349 tet_infoline( "Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()" );
1351 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1352 Actor actor = Actor::New();
1353 actor.SetSize( 100.0f, 100.0f );
1354 Stage::GetCurrent().Add( actor );
1356 Constraint constraint = Constraint::New<Dali::Vector3>( actor, Actor::Property::POSITION, EqualToConstraint() );
1357 constraint.AddSource( Source( camera, Actor::Property::POSITION ) );
1360 camera.SetPosition( 100.0f, 200.0f, 300.0f );
1361 application.SendNotification();
1362 application.Render();
1364 DALI_TEST_EQUALS( actor.GetCurrentPosition(), Vector3( 100.0f, 200.0f, 300.0f ), TEST_LOCATION);
1368 int UtcDaliCameraActorPropertyIndices(void)
1370 TestApplication application;
1371 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1373 Actor basicActor = Actor::New();
1374 Property::IndexContainer indices;
1375 camera.GetPropertyIndices( indices );
1376 DALI_TEST_CHECK( indices.Size() > basicActor.GetPropertyCount() );
1377 DALI_TEST_EQUALS( indices.Size(), camera.GetPropertyCount(), TEST_LOCATION );
1381 int UtcDaliCameraActorCheckLookAtAndFreeLookViews01(void)
1383 TestApplication application;
1384 Stage stage = Stage::GetCurrent();
1385 Vector2 stageSize = stage.GetSize();
1387 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1388 freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1389 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1391 Vector3 targetPosition( 30.0f, 240.0f, -256.0f );
1392 Actor target = Actor::New();
1393 target.SetParentOrigin( ParentOrigin::CENTER );
1394 target.SetPosition( targetPosition );
1396 Constraint cameraOrientationConstraint = Constraint::New<Quaternion> ( freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt );
1397 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_POSITION ) );
1398 cameraOrientationConstraint.AddSource( Source( freeLookCameraActor, Actor::Property::WORLD_POSITION ) );
1399 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_ORIENTATION ) );
1400 cameraOrientationConstraint.Apply();
1402 CameraActor lookAtCameraActor = CameraActor::New( stageSize );
1403 lookAtCameraActor.SetType( Camera::LOOK_AT_TARGET );
1404 lookAtCameraActor.SetTargetPosition( targetPosition );
1405 lookAtCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1407 stage.Add( target );
1408 stage.Add( freeLookCameraActor );
1409 stage.Add( lookAtCameraActor );
1411 // Create an arbitrary vector
1412 for( float x=-1.0f; x<=1.0f; x+=0.1f )
1414 for( float y=-1.0f; y<1.0f; y+=0.1f )
1416 for( float z=-1.0f; z<1.0f; z+=0.1f )
1418 Vector3 position( x, y, z );
1419 position.Normalize();
1422 freeLookCameraActor.SetPosition( position );
1423 lookAtCameraActor.SetPosition( position );
1425 application.SendNotification();
1426 application.Render();
1427 application.SendNotification();
1428 application.Render();
1429 Matrix freeLookViewMatrix;
1430 Matrix lookAtViewMatrix;
1431 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1432 lookAtCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( lookAtViewMatrix );
1434 DALI_TEST_EQUALS( freeLookViewMatrix, lookAtViewMatrix, 0.01, TEST_LOCATION );
1441 int UtcDaliCameraActorCheckLookAtAndFreeLookViews02(void)
1443 TestApplication application;
1444 Stage stage = Stage::GetCurrent();
1445 Vector2 stageSize = stage.GetSize();
1447 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1448 freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1449 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1451 Vector3 targetPosition( 30.0f, 240.0f, -256.0f );
1452 Actor target = Actor::New();
1453 target.SetParentOrigin( ParentOrigin::CENTER );
1454 target.SetPosition( targetPosition );
1456 Constraint cameraOrientationConstraint = Constraint::New<Quaternion> ( freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt );
1457 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_POSITION ) );
1458 cameraOrientationConstraint.AddSource( Source( freeLookCameraActor, Actor::Property::WORLD_POSITION ) );
1459 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_ORIENTATION ) );
1460 cameraOrientationConstraint.Apply();
1462 CameraActor lookAtCameraActor = CameraActor::New( stageSize );
1463 lookAtCameraActor.SetType( Camera::LOOK_AT_TARGET );
1464 lookAtCameraActor.SetTargetPosition( targetPosition );
1465 lookAtCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1467 stage.Add( target );
1468 stage.Add( freeLookCameraActor );
1469 stage.Add( lookAtCameraActor );
1470 stage.GetRenderTaskList().GetTask(0).SetCameraActor( freeLookCameraActor );
1472 // Create an arbitrary vector
1473 for( float x=-1.0f; x<=1.0f; x+=0.1f )
1475 for( float y=-1.0f; y<1.0f; y+=0.1f )
1477 for( float z=-1.0f; z<1.0f; z+=0.1f )
1479 Vector3 position( x, y, z );
1480 position.Normalize();
1483 freeLookCameraActor.SetPosition( position );
1484 lookAtCameraActor.SetPosition( position );
1486 application.SendNotification();
1487 application.Render();
1488 application.SendNotification();
1489 application.Render();
1490 Matrix freeLookViewMatrix;
1491 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1493 Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
1495 Matrix freeLookTest( false );
1496 Matrix::Multiply( freeLookTest, freeLookViewMatrix, freeLookWorld );
1497 DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION );
1505 int UtcDaliCameraActorCheckLookAtAndFreeLookViews03(void)
1507 TestApplication application;
1508 Stage stage = Stage::GetCurrent();
1509 Vector2 stageSize = stage.GetSize();
1511 Vector3 targetPosition( Vector3::ZERO );
1512 Vector3 cameraOffset( 0.0f, 0.0f, 100.0f );
1514 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1515 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1516 freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1518 Quaternion cameraOrientation( Radian( Degree( 180.0f ) ), Vector3::YAXIS );
1519 freeLookCameraActor.SetPosition( cameraOffset );
1520 freeLookCameraActor.SetOrientation( cameraOrientation );
1522 Actor cameraAnchor = Actor::New();
1523 cameraAnchor.Add( freeLookCameraActor );
1524 stage.Add( cameraAnchor );
1525 stage.GetRenderTaskList().GetTask(0).SetCameraActor( freeLookCameraActor );
1527 for( float angle = 1.0f; angle <= 180.0f; angle += 1.0f )
1529 Quaternion rotation( Radian( Degree( angle ) ), Vector3::YAXIS );
1531 freeLookCameraActor.SetPosition( rotation.Rotate( cameraOffset ) );
1532 cameraAnchor.SetOrientation( rotation );
1534 application.SendNotification();
1535 application.Render();
1536 application.SendNotification();
1537 application.Render();
1539 Matrix freeLookViewMatrix;
1540 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1542 Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
1544 Matrix freeLookTest( false );
1545 Matrix::Multiply( freeLookTest, freeLookViewMatrix, freeLookWorld );
1546 DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION );