2 * Copyright (c) 2014 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>
24 #include "dali-test-suite-utils/dali-test-suite-utils.h"
28 void camera_actor_test_startup(void)
30 test_return_value = TET_UNDEF;
33 void camera_actor_test_cleanup(void)
35 test_return_value = TET_PASS;
41 const float FLOAT_EPSILON = 0.001f;
42 const float TEST_ASPECT_RATIO = 0.123f;
43 const float TEST_FIELD_OF_VIEW = Radian(Degree(40.0f));
44 const float TEST_NEAR_PLANE_DISTANCE = 0.23f;
45 const float TEST_FAR_PLANE_DISTANCE = 0.973f;
47 const std::string SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME( "uLightCameraProjectionMatrix" );
48 const std::string SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME( "uLightCameraViewMatrix" );
49 const char* const RENDER_SHADOW_VERTEX_SOURCE =
50 " uniform mediump mat4 uLightCameraProjectionMatrix;\n"
51 " uniform mediump mat4 uLightCameraViewMatrix;\n"
55 " gl_Position = uProjection * uModelView * vec4(aPosition,1.0);\n"
56 " vec4 textureCoords = uLightCameraProjectionMatrix * uLightCameraViewMatrix * uModelMatrix * vec4(aPosition,1.0);\n"
57 " vTexCoord = 0.5 + 0.5 * (textureCoords.xy/textureCoords.w);\n"
60 const char* const RENDER_SHADOW_FRAGMENT_SOURCE =
61 "uniform lowp vec4 uShadowColor;\n"
64 " lowp float alpha;\n"
65 " alpha = texture2D(sTexture, vec2(vTexCoord.x, vTexCoord.y)).a;\n"
66 " gl_FragColor = vec4(uShadowColor.rgb, uShadowColor.a * alpha);\n"
69 } // Anonymous namespace
72 int UtcDaliCameraActorConstructorP(void)
74 TestApplication application;
75 tet_infoline( "Testing Dali::CameraActor::CameraActor()" );
79 DALI_TEST_CHECK( !actor );
83 // Note: No negative test for UtcDaliCameraActorConstructor.
85 int UtcDaliCameraActorDestructorP(void)
87 TestApplication application;
88 tet_infoline( "Testing Dali::~CameraActor (P)" );
89 CameraActor* actor = new CameraActor();
93 DALI_TEST_CHECK( true );
97 // Note: No negative test for UtcDaliCameraActorDestructor.
99 int UtcDaliCameraActorCopyConstructorP(void)
101 TestApplication application;
102 tet_infoline( "Testing Dali::CameraActor Copy Constructor (P)" );
103 CameraActor actor = CameraActor::New();
105 CameraActor copyActor( actor );
107 DALI_TEST_CHECK( copyActor );
108 DALI_TEST_CHECK( copyActor == actor );
113 int UtcDaliCameraActorCopyConstructorN(void)
115 TestApplication application;
116 tet_infoline( "Testing Dali::CameraActor Copy Constructor (N)" );
119 CameraActor copyActor( actor );
121 DALI_TEST_CHECK( !copyActor );
126 int UtcDaliCameraActorAssignmentOperatorP(void)
128 TestApplication application;
129 tet_infoline( "Testing Dali::CameraActor Assignment Operator (P)" );
130 const CameraActor actor = CameraActor::New();
132 CameraActor copyActor = actor;
134 DALI_TEST_CHECK( copyActor );
135 DALI_TEST_CHECK( copyActor == actor );
140 int UtcDaliCameraActorAssignmentOperatorN(void)
142 TestApplication application;
143 tet_infoline( "Testing Dali::CameraActor = (N)" );
146 CameraActor copyActor = actor;
148 DALI_TEST_CHECK( !copyActor );
153 int UtcDaliCameraActorNewP(void)
155 TestApplication application;
156 tet_infoline( "Testing Dali::CameraActor::New (P)" );
158 CameraActor actor = CameraActor::New();
160 DALI_TEST_CHECK( actor );
164 DALI_TEST_CHECK( !actor );
168 // Note: No negative test for UtcDaliCameraActorNew.
170 int UtcDaliCameraActorDownCastP(void)
172 TestApplication application;
173 tet_infoline( "Testing Dali::CameraActor::DownCast (P)" );
175 CameraActor camera = CameraActor::New();
176 Actor anActor = Actor::New();
177 anActor.Add( camera );
179 Actor child = anActor.GetChildAt( 0 );
180 CameraActor cameraActor = CameraActor::DownCast( child );
181 DALI_TEST_CHECK( cameraActor );
184 DALI_TEST_CHECK( !cameraActor );
186 cameraActor = DownCast< CameraActor >( child );
187 DALI_TEST_CHECK( cameraActor );
191 int UtcDaliCameraActorDownCastN(void)
193 TestApplication application;
194 tet_infoline( "Testing Dali::CameraActor::DownCast (N)" );
196 Actor actor1 = Actor::New();
197 Actor anActor = Actor::New();
198 anActor.Add( actor1 );
200 Actor child = anActor.GetChildAt( 0 );
201 CameraActor cameraActor = CameraActor::DownCast( child );
202 DALI_TEST_CHECK( !cameraActor );
204 Actor unInitialzedActor;
205 cameraActor = CameraActor::DownCast( unInitialzedActor );
206 DALI_TEST_CHECK( !cameraActor );
208 cameraActor = DownCast< CameraActor >( unInitialzedActor );
209 DALI_TEST_CHECK( !cameraActor );
213 // Note: SetType and GetType are tested within the same test cases.
215 int UtcDaliCameraActorSetGetTypeP(void)
217 TestApplication application;
218 tet_infoline( "Testing Dali::CameraActor GetType (P)" );
220 CameraActor actor = CameraActor::New();
221 DALI_TEST_EQUALS( actor.GetType(), Dali::Camera::FREE_LOOK, TEST_LOCATION );
223 actor.SetType( Dali::Camera::LOOK_AT_TARGET );
224 DALI_TEST_EQUALS( actor.GetType(), Dali::Camera::LOOK_AT_TARGET, TEST_LOCATION );
227 actor.GetProperty( CameraActor::Property::TYPE ).Get( sValue );
228 std::string result( "LOOK_AT_TARGET");
229 DALI_TEST_EQUALS( result, sValue, TEST_LOCATION );
233 int UtcDaliCameraActorSetGetTypeN(void)
235 TestApplication application;
236 tet_infoline( "Testing Dali::CameraActor GetType (N)" );
240 Dali::Camera::Type cameraType = Dali::Camera::FREE_LOOK;
243 cameraType = actor.GetType();
245 catch ( Dali::DaliException& e )
247 DALI_TEST_PRINT_ASSERT( e );
248 DALI_TEST_ASSERT( e, "camera", TEST_LOCATION );
251 const CameraActor aConstActor;
255 cameraType = aConstActor.GetType();
257 catch ( Dali::DaliException& e )
259 DALI_TEST_PRINT_ASSERT( e );
260 DALI_TEST_ASSERT( e, "camera", TEST_LOCATION );
263 DALI_TEST_EQUALS( (int)cameraType, (int)Dali::Camera::FREE_LOOK, TEST_LOCATION );
267 int UtcDaliCameraActorSetFieldOfViewP(void)
269 TestApplication application;
270 tet_infoline( "Testing Dali::CameraActor Set Field of view (P)" );
272 CameraActor defaultCamera = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
273 const float defaultFieldOfView = defaultCamera.GetFieldOfView();
275 CameraActor actor = CameraActor::New();
276 DALI_TEST_EQUALS( actor.GetFieldOfView(), defaultFieldOfView, TEST_LOCATION );
278 float fieldOfView = Math::PI / 3.0f;
279 actor.SetFieldOfView( fieldOfView );
280 DALI_TEST_EQUALS( actor.GetFieldOfView(), fieldOfView, TEST_LOCATION );
283 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
284 DALI_TEST_EQUALS( fieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
288 int UtcDaliCameraActorSetFieldOfViewN(void)
290 TestApplication application;
291 tet_infoline( "Testing Dali::CameraActor Set Field of view (N)" );
293 CameraActor defaultCamera = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
294 const float defaultFieldOfView = defaultCamera.GetFieldOfView();
296 CameraActor actor = CameraActor::New();
297 DALI_TEST_EQUALS( actor.GetFieldOfView(), defaultFieldOfView, TEST_LOCATION );
299 float fieldOfView = Math::PI / 3.0f;
300 actor.SetFieldOfView( fieldOfView );
301 DALI_TEST_EQUALS( actor.GetFieldOfView(), fieldOfView, TEST_LOCATION );
304 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
305 DALI_TEST_EQUALS( fieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
309 int UtcDaliCameraActorGetFieldOfViewP(void)
311 TestApplication application;
312 tet_infoline( "Testing Dali::CameraActor Get Field of view (P)" );
313 const Vector2 size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT );
315 CameraActor defaultCamera = CameraActor::New( size );
317 const float cameraZ = 2.0f * std::max( size.width, size.height );
318 const float expectedFieldOfView = 2.0f * std::atan( size.height * 0.5f / cameraZ );
320 CameraActor actor = CameraActor::New();
321 DALI_TEST_EQUALS( actor.GetFieldOfView(), expectedFieldOfView, TEST_LOCATION );
324 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
325 DALI_TEST_EQUALS( expectedFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
329 int UtcDaliCameraActorGetFieldOfViewN(void)
331 TestApplication application;
332 tet_infoline( "Testing Dali::CameraActor Get Field of view (N)" );
334 CameraActor defaultCamera = CameraActor::New();
336 bool asserted = true;
339 defaultCamera.GetFieldOfView();
341 catch( Dali::DaliException& e )
343 DALI_TEST_PRINT_ASSERT( e );
344 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
347 DALI_TEST_CHECK( asserted );
353 int UtcDaliCameraActorSetAspectRatioP(void)
355 TestApplication application;
356 tet_infoline( "Testing Dali::CameraActor Set Aspect Ratio (P)" );
358 CameraActor actor = CameraActor::New();
359 DALI_TEST_EQUALS( actor.GetAspectRatio(), static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT ), TEST_LOCATION );
361 // Set an initial value to confirm a further set changes it.
362 float aspect = 4.0f / 3.0f;
363 actor.SetAspectRatio( aspect );
364 DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
366 aspect = 16.0f / 9.0f;
367 actor.SetAspectRatio( aspect );
368 DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
373 int UtcDaliCameraActorSetAspectRatioN(void)
375 TestApplication application;
376 tet_infoline( "Testing Dali::CameraActor Set Aspect Ratio (N)" );
380 bool asserted = true;
383 actor.SetAspectRatio( 16.0f / 9.0f );
385 catch( Dali::DaliException& e )
387 DALI_TEST_PRINT_ASSERT( e );
388 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
391 DALI_TEST_CHECK( asserted );
396 int UtcDaliCameraActorGetAspectRatioP(void)
398 TestApplication application;
399 tet_infoline("Testing Dali::CameraActor Get Aspect Ratio");
401 CameraActor actor = CameraActor::New();
402 float defaultAspect = static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT );
404 DALI_TEST_EQUALS( actor.GetAspectRatio(), defaultAspect, TEST_LOCATION );
407 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
408 DALI_TEST_EQUALS( defaultAspect, value, FLOAT_EPSILON, TEST_LOCATION );
413 int UtcDaliCameraActorGetAspectRatioN(void)
415 TestApplication application;
416 tet_infoline( "Testing Dali::CameraActor Get Aspect Ratio (N)" );
420 bool asserted = true;
423 actor.GetAspectRatio();
425 catch( Dali::DaliException& e )
427 DALI_TEST_PRINT_ASSERT( e );
428 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
432 DALI_TEST_CHECK( asserted );
437 int UtcDaliCameraActorSetNearClippingPlaneP(void)
439 TestApplication application;
440 tet_infoline( "Testing Dali::CameraActor Set Near clipping plane (P)" );
442 CameraActor actor = CameraActor::New();
444 // Set a value so we are not relying on a particular default for this test case.
445 actor.SetNearClippingPlane( 200.0f );
446 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, TEST_LOCATION );
448 actor.SetNearClippingPlane( 400.0f );
449 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 400.0f, TEST_LOCATION );
451 // Check setting the property.
452 actor.SetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE, Property::Value( 300.0f ) );
453 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 300.0f, FLOAT_EPSILON, TEST_LOCATION );
457 int UtcDaliCameraActorSetNearClippingPlaneN(void)
459 TestApplication application;
460 tet_infoline( "Testing Dali::CameraActor Set Near clipping plane (N)" );
464 bool asserted = true;
467 actor.SetNearClippingPlane( 200.0f );
469 catch( Dali::DaliException& e )
471 DALI_TEST_PRINT_ASSERT( e );
472 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
476 DALI_TEST_CHECK( asserted );
481 int UtcDaliCameraActorGetNearClippingPlaneP(void)
483 TestApplication application;
484 tet_infoline( "Testing Dali::CameraActor Get Near clipping plane (P)" );
486 // Check the default value.
487 CameraActor actor = CameraActor::New();
488 float defaultValue = 800.0f;
489 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), defaultValue, TEST_LOCATION );
491 // Check getting the property.
493 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
494 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
498 int UtcDaliCameraActorGetNearClippingPlaneN(void)
500 TestApplication application;
501 tet_infoline( "Testing Dali::CameraActor Get Near clipping plane (N)" );
504 bool asserted = true;
507 actor.GetNearClippingPlane();
509 catch( Dali::DaliException& e )
511 DALI_TEST_PRINT_ASSERT( e );
512 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
516 DALI_TEST_CHECK( asserted );
521 int UtcDaliCameraActorSetFarClippingPlaneP(void)
523 TestApplication application;
524 tet_infoline( "Testing Dali::CameraActor Set Far clipping plane (P)" );
526 CameraActor actor = CameraActor::New();
528 // Set a value so we are not relying on a particular default for this test case.
529 actor.SetFarClippingPlane( 2000.0f );
530 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 2000.0f, TEST_LOCATION );
532 actor.SetFarClippingPlane( 4000.0f );
533 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 4000.0f, TEST_LOCATION );
535 // Check setting the property.
536 actor.SetProperty( CameraActor::Property::FAR_PLANE_DISTANCE, 2000.0f );
537 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 2000.0f, FLOAT_EPSILON, TEST_LOCATION );
541 int UtcDaliCameraActorSetFarClippingPlaneN(void)
543 TestApplication application;
544 tet_infoline( "Testing Dali::CameraActor Set Far clipping plane (N)" );
548 bool asserted = true;
551 actor.SetFarClippingPlane( 2000.0f );
553 catch( Dali::DaliException& e )
555 DALI_TEST_PRINT_ASSERT( e );
556 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
560 DALI_TEST_CHECK( asserted );
565 int UtcDaliCameraActorGetFarClippingPlaneP(void)
567 TestApplication application;
568 tet_infoline( "Testing Dali::CameraActor Get Far clipping plane (P)" );
570 CameraActor actor = CameraActor::New();
571 float defaultValue = 800.0f + ( 0xFFFF >> 4 );
572 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), defaultValue, TEST_LOCATION );
574 // Check getting the property.
576 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
577 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
581 int UtcDaliCameraActorGetFarClippingPlaneN(void)
583 TestApplication application;
584 tet_infoline( "Testing Dali::CameraActor Get Far clipping plane (N)" );
588 bool asserted = true;
591 actor.GetFarClippingPlane();
593 catch( Dali::DaliException& e )
595 DALI_TEST_PRINT_ASSERT( e );
596 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
600 DALI_TEST_CHECK( asserted );
605 int UtcDaliCameraActorSetTargetPositionP(void)
607 TestApplication application;
608 tet_infoline( "Testing Dali::CameraActor Set Target Position (P)" );
610 CameraActor actor = CameraActor::New();
612 Vector3 target1( 10.0f, 20.0f, 30.0f );
613 Vector3 target2( 15.0f, 25.0f, 35.0f );
615 // Set a value so we are not relying on a particular default for this test case.
616 actor.SetTargetPosition( target1 );
617 DALI_TEST_EQUALS( actor.GetTargetPosition(), target1, TEST_LOCATION );
619 actor.SetTargetPosition( target2 );
620 DALI_TEST_EQUALS( actor.GetTargetPosition(), target2, TEST_LOCATION );
622 // Check setting the property.
623 actor.SetProperty( CameraActor::Property::TARGET_POSITION, target1 );
624 DALI_TEST_EQUALS( actor.GetTargetPosition(), target1, FLOAT_EPSILON, TEST_LOCATION );
628 int UtcDaliCameraActorSetTargetPositionN(void)
630 TestApplication application;
631 tet_infoline( "Testing Dali::CameraActor Set Target Position (N)" );
635 bool asserted = true;
638 actor.SetTargetPosition( Vector3( 10.0f, 20.0f, 30.0f ) );
640 catch( Dali::DaliException& e )
642 DALI_TEST_PRINT_ASSERT( e );
643 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
646 DALI_TEST_CHECK( asserted );
651 int UtcDaliCameraActorGetTargetPositionP(void)
653 TestApplication application;
654 tet_infoline( "Testing Dali::CameraActor Get Target Position (P)" );
656 CameraActor actor = CameraActor::New();
657 Vector3 defaultValue( Vector3::ZERO );
658 DALI_TEST_EQUALS( actor.GetTargetPosition(), defaultValue, TEST_LOCATION );
660 // Check getting the property.
662 actor.GetProperty( CameraActor::Property::TARGET_POSITION ).Get( value );
663 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
667 int UtcDaliCameraActorGetTargetPositionN(void)
669 TestApplication application;
670 tet_infoline( "Testing Dali::CameraActor Get Target Position (N)" );
674 bool asserted = true;
677 actor.GetTargetPosition();
679 catch( Dali::DaliException& e )
681 DALI_TEST_PRINT_ASSERT( e );
682 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
685 DALI_TEST_CHECK( asserted );
690 int UtcDaliCameraActorSetInvertYAxisP(void)
692 TestApplication application;
693 tet_infoline( "Testing Dali::CameraActor Set InvertYAxis (P)" );
695 CameraActor actor = CameraActor::New();
697 // Set a value so we are not relying on a particular default for this test case.
698 actor.SetInvertYAxis( false );
699 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
701 actor.SetInvertYAxis( true );
702 DALI_TEST_EQUALS( actor.GetInvertYAxis(), true, TEST_LOCATION );
704 actor.SetProperty( CameraActor::Property::INVERT_Y_AXIS, false );
705 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
709 int UtcDaliCameraActorSetInvertYAxisN(void)
711 TestApplication application;
712 tet_infoline( "Testing Dali::CameraActor Set InvertYAxis (N)" );
716 bool asserted = true;
719 actor.SetInvertYAxis( false );
721 catch( Dali::DaliException& e )
723 DALI_TEST_PRINT_ASSERT( e );
724 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
727 DALI_TEST_CHECK( asserted );
731 int UtcDaliCameraActorGetInvertYAxisP(void)
733 TestApplication application;
734 tet_infoline( "Testing Dali::CameraActor Get InvertYAxis (P)" );
736 // Check the default value.
737 CameraActor actor = CameraActor::New();
738 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
740 // Check getting the property.
742 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
743 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
747 int UtcDaliCameraActorGetInvertYAxisN(void)
749 TestApplication application;
750 tet_infoline( "Testing Dali::CameraActor Get InvertYAxis (N)" );
754 bool asserted = true;
757 actor.GetInvertYAxis();
759 catch( Dali::DaliException& e )
761 DALI_TEST_PRINT_ASSERT( e );
762 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
765 DALI_TEST_CHECK( asserted );
769 int UtcDaliCameraActorSetPerspectiveProjectionP(void)
771 TestApplication application;
772 tet_infoline( "Testing Dali::CameraActor::SetPerspectiveProjection (P)" );
774 CameraActor actor = CameraActor::New();
775 actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
777 DALI_TEST_CHECK( actor );
780 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
781 DALI_TEST_EQUALS( 0.666666f, value, FLOAT_EPSILON, TEST_LOCATION );
782 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
783 DALI_TEST_EQUALS( 0.489957f, value, FLOAT_EPSILON, TEST_LOCATION );
784 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
785 DALI_TEST_EQUALS( 150.f, value, FLOAT_EPSILON, TEST_LOCATION );
786 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
787 DALI_TEST_EQUALS( 4245.f, value, FLOAT_EPSILON, TEST_LOCATION );
789 DALI_TEST_EQUALS( (int)actor.GetProjectionMode(), (int)Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
794 int UtcDaliCameraActorSetPerspectiveProjectionN(void)
796 TestApplication application;
797 tet_infoline( "Testing Dali::CameraActor::SetPerspectiveProjection (N)" );
799 Stage stage = Stage::GetCurrent();
800 Vector2 stageSize = stage.GetSize();
802 CameraActor actor = CameraActor::New();
804 // Check that setting perspective projection without a size (using zero size) uses the stages size.
805 actor.SetPerspectiveProjection( Size::ZERO );
807 float nearClippingPlane = std::max( stageSize.width, stageSize.height );
808 float farClippingPlane = nearClippingPlane + static_cast<float>( 0xFFFF >> 4 );
810 DALI_TEST_EQUALS( nearClippingPlane, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
811 DALI_TEST_EQUALS( farClippingPlane, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
812 DALI_TEST_EQUALS( actor.GetProjectionMode(), (int)Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
817 int UtcDaliCameraActorSetOrthographicProjectionP1(void)
819 TestApplication application;
820 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,1)" );
822 CameraActor actor = CameraActor::New( Size( 1080.0f, 1920.0f ) );
823 DALI_TEST_CHECK( actor );
825 Stage::GetCurrent().Add( actor );
827 actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
828 application.SendNotification();
829 application.Render( 0 );
830 application.Render();
831 application.SendNotification();
833 float defaultAspectRatio;
834 float defaultFieldOfView;
835 float defaultNearPlaneDistance;
836 float defaultFarPlaneDistance;
837 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
838 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
839 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
840 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
841 Vector3 defaultPos = actor.GetCurrentPosition();
843 actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
845 application.SendNotification();
846 application.Render( 0 );
847 application.Render();
848 application.SendNotification();
851 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
852 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
853 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
854 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
855 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
856 DALI_TEST_EQUALS( defaultNearPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION );
857 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
858 DALI_TEST_EQUALS( defaultFarPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION );
860 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
861 DALI_TEST_EQUALS( -540.0f, value, FLOAT_EPSILON, TEST_LOCATION );
862 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
863 DALI_TEST_EQUALS( 540.0f, value, FLOAT_EPSILON, TEST_LOCATION );
864 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
865 DALI_TEST_EQUALS( 960.0f, value, FLOAT_EPSILON, TEST_LOCATION );
866 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
867 DALI_TEST_EQUALS( -960.0f, value, FLOAT_EPSILON, TEST_LOCATION );
869 Vector3 pos = actor.GetCurrentPosition();
870 DALI_TEST_EQUALS( defaultPos.z, pos.z, 0.001f, TEST_LOCATION );
872 DALI_TEST_EQUALS( (int)actor.GetProjectionMode(), (int)Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
876 int UtcDaliCameraActorSetOrthographicProjectionN(void)
878 TestApplication application;
879 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (N)" );
882 bool asserted = true;
885 actor.GetProjectionMode();
887 catch( Dali::DaliException& e )
889 DALI_TEST_PRINT_ASSERT( e );
890 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
893 DALI_TEST_CHECK( asserted );
897 int UtcDaliCameraActorSetOrthographicProjectionP2(void)
899 TestApplication application;
900 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,2)" );
902 CameraActor actor = CameraActor::New();
903 DALI_TEST_CHECK( actor );
905 float defaultAspectRatio;
906 float defaultFieldOfView;
907 float defaultNearPlaneDistance;
908 float defaultFarPlaneDistance;
909 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
910 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
911 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
912 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
914 // Check setting with specific near and far plane distances.
915 actor.SetOrthographicProjection( -100.0f, 200.0f, -300.0f, 500.0f, 400.0f, 4000.0f );
918 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
919 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
920 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
921 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
922 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
923 DALI_TEST_EQUALS( 400.0f, value, FLOAT_EPSILON, TEST_LOCATION );
924 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
925 DALI_TEST_EQUALS( 4000.0f, value, FLOAT_EPSILON, TEST_LOCATION );
927 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
928 DALI_TEST_EQUALS( -100.0f, value, FLOAT_EPSILON, TEST_LOCATION );
929 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
930 DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION );
931 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
932 DALI_TEST_EQUALS( -300.0f, value, FLOAT_EPSILON, TEST_LOCATION );
933 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
934 DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION );
936 DALI_TEST_EQUALS( (int)actor.GetProjectionMode(), (int)Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
941 int UtcDaliCameraActorSetOrthographicProjectionP3(void)
943 TestApplication application;
944 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,3)" );
946 CameraActor actor = CameraActor::New();
947 DALI_TEST_CHECK( actor );
949 float defaultAspectRatio;
950 float defaultFieldOfView;
951 float defaultNearPlaneDistance;
952 float defaultFarPlaneDistance;
953 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
954 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
955 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
956 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
958 actor.SetProjectionMode( Dali::Camera::ORTHOGRAPHIC_PROJECTION );
960 actor.SetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE, -100.0f );
961 actor.SetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE, 200.0f );
962 actor.SetProperty( CameraActor::Property::TOP_PLANE_DISTANCE, -300.0f );
963 actor.SetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE, 500.0f );
964 actor.SetNearClippingPlane( 400.0f );
965 actor.SetFarClippingPlane( 4000.0f );
968 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
969 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
970 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
971 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
972 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
973 DALI_TEST_EQUALS( 400.0f, value, FLOAT_EPSILON, TEST_LOCATION );
974 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
975 DALI_TEST_EQUALS( 4000.0f, value, FLOAT_EPSILON, TEST_LOCATION );
977 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
978 DALI_TEST_EQUALS( -100.0f, value, FLOAT_EPSILON, TEST_LOCATION );
979 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
980 DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION );
981 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
982 DALI_TEST_EQUALS( -300.0f, value, FLOAT_EPSILON, TEST_LOCATION );
983 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
984 DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION );
986 DALI_TEST_EQUALS( (int)actor.GetProjectionMode(), (int)Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
987 std::string stringValue;
988 actor.GetProperty( CameraActor::Property::PROJECTION_MODE ).Get( stringValue );
989 DALI_TEST_EQUALS( stringValue, "ORTHOGRAPHIC_PROJECTION", TEST_LOCATION );
993 int UtcDaliCameraActorSetProjectionModeP(void)
995 TestApplication application;
996 tet_infoline( "Testing Dali::CameraActor::SetProjectionModeP (P)" );
998 CameraActor actor = CameraActor::New();
1000 // Check that changing the projection mode alone does not alter other presets.
1001 actor.SetNearClippingPlane( 200.0f );
1002 actor.SetFarClippingPlane( 400.0f );
1004 actor.SetProjectionMode( Dali::Camera::PERSPECTIVE_PROJECTION );
1006 DALI_TEST_EQUALS( (int)actor.GetProjectionMode(), (int)Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1007 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION );
1008 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION );
1010 actor.SetProjectionMode( Dali::Camera::ORTHOGRAPHIC_PROJECTION );
1012 DALI_TEST_EQUALS( (int)actor.GetProjectionMode(), (int)Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1013 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION );
1014 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION );
1016 // Check setting the property.
1017 Property::Value setValue = "PERSPECTIVE_PROJECTION";
1018 actor.SetProperty( CameraActor::Property::PROJECTION_MODE, setValue );
1019 DALI_TEST_EQUALS( (int)actor.GetProjectionMode(), (int)Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1023 int UtcDaliCameraActorSetProjectionModeN(void)
1025 TestApplication application;
1026 tet_infoline( "Testing Dali::CameraActor::SetProjectionModeP (N)" );
1030 bool asserted = true;
1033 actor.SetProjectionMode( Dali::Camera::PERSPECTIVE_PROJECTION );
1035 catch( Dali::DaliException& e )
1037 DALI_TEST_PRINT_ASSERT( e );
1038 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
1041 DALI_TEST_CHECK( asserted );
1045 int UtcDaliCameraActorGetProjectionModeP(void)
1047 TestApplication application;
1048 tet_infoline( "Testing Dali::CameraActor::GetPerspectiveProjection (P)" );
1050 CameraActor actor = CameraActor::New();
1052 actor.SetOrthographicProjection( Size::ONE );
1053 DALI_TEST_EQUALS( (int)actor.GetProjectionMode(), (int)Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1055 actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
1056 DALI_TEST_EQUALS( (int)actor.GetProjectionMode(), (int)Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1058 // Check getting the property.
1059 std::string stringValue;
1060 actor.GetProperty( CameraActor::Property::PROJECTION_MODE ).Get( stringValue );
1061 DALI_TEST_EQUALS( stringValue, "PERSPECTIVE_PROJECTION", TEST_LOCATION );
1065 int UtcDaliCameraActorGetProjectionModeN(void)
1067 TestApplication application;
1068 tet_infoline( "Testing Dali::CameraActor::GetProjectionMode (N)" );
1072 bool asserted = true;
1075 actor.GetProjectionMode();
1077 catch( Dali::DaliException& e )
1079 DALI_TEST_PRINT_ASSERT( e );
1080 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
1083 DALI_TEST_CHECK( asserted );
1087 int UtcDaliCameraActorSetCameraOffStage(void)
1089 TestApplication application;
1090 tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
1092 CameraActor actor = CameraActor::New();
1094 actor.SetType( Camera::FREE_LOOK );
1095 actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
1096 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1097 actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
1098 actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
1099 actor.SetProjectionMode( Camera::PERSPECTIVE_PROJECTION );
1101 actor.SetInvertYAxis( false );
1103 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );//change to machine epsilon
1104 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1105 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1106 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1107 DALI_TEST_EQUALS( Camera::PERSPECTIVE_PROJECTION, actor.GetProjectionMode(), TEST_LOCATION );
1108 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1112 actor.GetProperty( CameraActor::Property::ASPECT_RATIO).Get( value );
1113 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
1114 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW).Get( value );
1115 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
1116 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE).Get( value );
1117 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1118 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE).Get( value );
1119 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1120 actor.GetProperty( CameraActor::Property::PROJECTION_MODE).Get( sValue );
1121 DALI_TEST_EQUALS( "PERSPECTIVE_PROJECTION", sValue, TEST_LOCATION );
1123 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS).Get( bValue );
1124 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1128 int UtcDaliCameraActorSetCameraOnStage(void)
1130 TestApplication application;
1131 tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
1133 CameraActor actor = CameraActor::New();
1134 Stage::GetCurrent().Add( actor );
1135 application.Render( 0 );
1136 application.SendNotification();
1138 actor.SetType( Camera::LOOK_AT_TARGET );
1139 actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
1140 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1141 actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
1142 actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
1143 actor.SetInvertYAxis( false );
1145 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1147 // Will need 2 frames to ensure both buffers are set to same values:
1148 application.Render();
1149 application.SendNotification();
1150 application.Render();
1151 application.SendNotification();
1153 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
1154 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1155 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1156 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1157 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1160 actor.GetProperty( CameraActor::Property::TYPE ).Get( sValue );
1161 DALI_TEST_EQUALS( sValue, "LOOK_AT_TARGET", TEST_LOCATION );
1164 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
1165 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
1166 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
1167 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
1168 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
1169 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1170 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value);
1171 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1174 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
1175 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1179 int UtcDaliCameraActorGetCamera(void)
1181 TestApplication application;
1182 tet_infoline( "Testing Dali::CameraActor::GetCamera()" );
1184 CameraActor actor = CameraActor::New();
1186 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1188 DALI_TEST_EQUALS( actor.GetAspectRatio(), TEST_ASPECT_RATIO, FLOAT_EPSILON, TEST_LOCATION );
1190 actor.SetProperty( CameraActor::Property::TYPE, "FREE_LOOK" );
1191 actor.SetProperty( CameraActor::Property::ASPECT_RATIO, TEST_ASPECT_RATIO );
1192 actor.SetProperty( CameraActor::Property::FIELD_OF_VIEW, TEST_FIELD_OF_VIEW );
1193 actor.SetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE, TEST_NEAR_PLANE_DISTANCE );
1194 actor.SetProperty( CameraActor::Property::FAR_PLANE_DISTANCE, TEST_FAR_PLANE_DISTANCE );
1196 DALI_TEST_EQUALS( Camera::FREE_LOOK, actor.GetType(), TEST_LOCATION );
1197 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
1198 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1199 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1200 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1204 int UtcDaliCameraActorDefaultProperties(void)
1206 TestApplication application;
1207 tet_infoline( "Testing Dali::CameraActor DefaultProperties" );
1209 CameraActor actor = CameraActor::New();
1211 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1212 Stage::GetCurrent().Add( actor );
1213 application.Render( 0 );
1214 application.SendNotification();
1216 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
1217 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1219 std::vector<Property::Index> indices ;
1220 indices.push_back( CameraActor::Property::TYPE );
1221 indices.push_back( CameraActor::Property::PROJECTION_MODE );
1222 indices.push_back( CameraActor::Property::FIELD_OF_VIEW );
1223 indices.push_back( CameraActor::Property::ASPECT_RATIO );
1224 indices.push_back( CameraActor::Property::NEAR_PLANE_DISTANCE );
1225 indices.push_back( CameraActor::Property::FAR_PLANE_DISTANCE );
1226 indices.push_back( CameraActor::Property::LEFT_PLANE_DISTANCE );
1227 indices.push_back( CameraActor::Property::RIGHT_PLANE_DISTANCE );
1228 indices.push_back( CameraActor::Property::TOP_PLANE_DISTANCE );
1229 indices.push_back( CameraActor::Property::BOTTOM_PLANE_DISTANCE );
1230 indices.push_back( CameraActor::Property::TARGET_POSITION );
1231 indices.push_back( CameraActor::Property::PROJECTION_MATRIX );
1232 indices.push_back( CameraActor::Property::VIEW_MATRIX );
1233 indices.push_back( CameraActor::Property::INVERT_Y_AXIS );
1235 DALI_TEST_CHECK( actor.GetPropertyCount() == ( Actor::New().GetPropertyCount() + indices.size() ) );
1237 for( std::vector<Property::Index>::iterator iter = indices.begin(); iter != indices.end(); ++iter )
1239 DALI_TEST_EQUALS( *iter, actor.GetPropertyIndex( actor.GetPropertyName( *iter ) ), TEST_LOCATION);
1240 DALI_TEST_CHECK( !actor.IsPropertyAnimatable( *iter ) );
1242 if ( ( *iter == CameraActor::Property::PROJECTION_MATRIX ) ||
1243 ( *iter == CameraActor::Property::VIEW_MATRIX ) )
1245 DALI_TEST_CHECK( !actor.IsPropertyWritable( *iter ) );
1249 DALI_TEST_CHECK( actor.IsPropertyWritable( *iter ) );
1252 DALI_TEST_CHECK( actor.GetPropertyType( *iter ) == actor.GetPropertyType( *iter ) ); // just checking call succeeds
1255 // Set/Get one of them.
1256 const float newAspect = TEST_ASPECT_RATIO * 2.0f;
1258 actor.SetProperty( CameraActor::Property::ASPECT_RATIO, Property::Value( newAspect ) );
1259 application.Render();
1260 application.SendNotification();
1261 application.Render();
1262 application.SendNotification();
1264 DALI_TEST_EQUALS( actor.GetAspectRatio(), newAspect, TEST_LOCATION );
1268 int UtcDaliCameraActorModelView(void)
1270 TestApplication application;
1271 tet_infoline( "Testing Dali::CameraActor Test view application" );
1273 BufferImage image = CreateBufferImage();
1275 ImageActor actor = ImageActor::New( image );
1276 actor.SetSize( 100.0f, 100.0f );
1277 actor.SetPosition( 20.0f, 30.0f, 40.0f );
1278 actor.SetParentOrigin( ParentOrigin::CENTER );
1279 Stage::GetCurrent().Add( actor );
1281 application.SendNotification();
1282 application.Render( 0 );
1283 application.Render();
1284 application.SendNotification();
1286 Matrix resultMatrix( true );
1287 resultMatrix.SetTransformComponents( Vector3::ONE, Quaternion::IDENTITY, actor.GetCurrentPosition() );
1289 RenderTask task = Stage::GetCurrent().GetRenderTaskList().GetTask( 0 );
1290 CameraActor cameraActor = task.GetCameraActor();
1292 Matrix viewMatrix( false );
1293 cameraActor.GetProperty( CameraActor::Property::VIEW_MATRIX ).Get( viewMatrix );
1294 Matrix::Multiply( resultMatrix, resultMatrix, viewMatrix );
1296 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( "uModelView", resultMatrix ) );
1300 int UtcDaliCameraActorReadProjectionMatrix(void)
1302 TestApplication application;
1303 tet_infoline( "Testing Dali::CameraActor::ReadProjectionMatrix()" );
1305 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1306 application.SendNotification();
1307 application.Render( 0 );
1308 application.Render();
1309 application.SendNotification();
1310 Image image = CreateBufferImage();
1311 ImageActor imageActor = ImageActor::New( image );
1312 imageActor.SetSize( 100.0f, 100.0f );
1313 Stage::GetCurrent().Add( imageActor );
1315 Matrix projectionMatrix;
1318 camera.GetProperty( CameraActor::CameraActor::Property::PROJECTION_MATRIX ).Get( projectionMatrix );
1319 camera.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( viewMatrix );
1321 ShaderEffect shaderEffect = ShaderEffect::New( RENDER_SHADOW_VERTEX_SOURCE, RENDER_SHADOW_FRAGMENT_SOURCE );
1322 imageActor.SetShaderEffect( shaderEffect );
1324 shaderEffect.SetUniform( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
1325 shaderEffect.SetUniform( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
1327 Property::Index projectionMatrixPropertyIndex = shaderEffect.GetPropertyIndex( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME );
1328 Property::Index viewMatrixPropertyIndex = shaderEffect.GetPropertyIndex( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME );
1330 Constraint projectionMatrixConstraint = Constraint::New<Dali::Matrix>( shaderEffect, projectionMatrixPropertyIndex, EqualToConstraint() );
1331 projectionMatrixConstraint.AddSource( Source( camera, CameraActor::Property::PROJECTION_MATRIX ) );
1332 Constraint viewMatrixConstraint = Constraint::New<Dali::Matrix>( shaderEffect, viewMatrixPropertyIndex, EqualToConstraint() );
1333 viewMatrixConstraint.AddSource( Source( camera, CameraActor::Property::VIEW_MATRIX ) );
1335 projectionMatrixConstraint.Apply();
1336 viewMatrixConstraint.Apply();
1338 application.SendNotification();
1339 application.Render();
1341 // Test effects of Constraint.
1342 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME.c_str(), projectionMatrix) );
1344 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME.c_str(), viewMatrix ) );
1348 int UtcDaliCameraActorAnimatedProperties(void)
1350 TestApplication application;
1351 tet_infoline( "Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()" );
1353 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1354 Actor actor = Actor::New();
1355 actor.SetSize( 100.0f, 100.0f );
1356 Stage::GetCurrent().Add( actor );
1358 Constraint constraint = Constraint::New<Dali::Vector3>( actor, Actor::Property::POSITION, EqualToConstraint() );
1359 constraint.AddSource( Source( camera, Actor::Property::POSITION ) );
1362 camera.SetPosition( 100.0f, 200.0f, 300.0f );
1363 application.SendNotification();
1364 application.Render();
1366 DALI_TEST_EQUALS( actor.GetCurrentPosition(), Vector3( 100.0f, 200.0f, 300.0f ), TEST_LOCATION);
1370 int UtcDaliCameraActorPropertyIndices(void)
1372 TestApplication application;
1373 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1375 Actor basicActor = Actor::New();
1376 Property::IndexContainer indices;
1377 camera.GetPropertyIndices( indices );
1378 DALI_TEST_CHECK( indices.Size() > basicActor.GetPropertyCount() );
1379 DALI_TEST_EQUALS( indices.Size(), camera.GetPropertyCount(), TEST_LOCATION );
1383 int UtcDaliCameraActorCheckLookAtAndFreeLookViews01(void)
1385 TestApplication application;
1386 Stage stage = Stage::GetCurrent();
1387 Vector2 stageSize = stage.GetSize();
1389 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1390 freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1391 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1393 Vector3 targetPosition( 30.0f, 240.0f, -256.0f );
1394 Actor target = Actor::New();
1395 target.SetParentOrigin( ParentOrigin::CENTER );
1396 target.SetPosition( targetPosition );
1398 Constraint cameraOrientationConstraint = Constraint::New<Quaternion> ( freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt );
1399 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_POSITION ) );
1400 cameraOrientationConstraint.AddSource( Source( freeLookCameraActor, Actor::Property::WORLD_POSITION ) );
1401 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_ORIENTATION ) );
1402 cameraOrientationConstraint.Apply();
1404 CameraActor lookAtCameraActor = CameraActor::New( stageSize );
1405 lookAtCameraActor.SetType( Camera::LOOK_AT_TARGET );
1406 lookAtCameraActor.SetTargetPosition( targetPosition );
1407 lookAtCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1409 stage.Add( target );
1410 stage.Add( freeLookCameraActor );
1411 stage.Add( lookAtCameraActor );
1413 // Create an arbitrary vector
1414 for( float x=-1.0f; x<=1.0f; x+=0.1f )
1416 for( float y=-1.0f; y<1.0f; y+=0.1f )
1418 for( float z=-1.0f; z<1.0f; z+=0.1f )
1420 Vector3 position( x, y, z );
1421 position.Normalize();
1424 freeLookCameraActor.SetPosition( position );
1425 lookAtCameraActor.SetPosition( position );
1427 application.SendNotification();
1428 application.Render();
1429 application.SendNotification();
1430 application.Render();
1431 Matrix freeLookViewMatrix;
1432 Matrix lookAtViewMatrix;
1433 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1434 lookAtCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( lookAtViewMatrix );
1436 DALI_TEST_EQUALS( freeLookViewMatrix, lookAtViewMatrix, 0.01, TEST_LOCATION );
1443 int UtcDaliCameraActorCheckLookAtAndFreeLookViews02(void)
1445 TestApplication application;
1446 Stage stage = Stage::GetCurrent();
1447 Vector2 stageSize = stage.GetSize();
1449 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1450 freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1451 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1453 Vector3 targetPosition( 30.0f, 240.0f, -256.0f );
1454 Actor target = Actor::New();
1455 target.SetParentOrigin( ParentOrigin::CENTER );
1456 target.SetPosition( targetPosition );
1458 Constraint cameraOrientationConstraint = Constraint::New<Quaternion> ( freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt );
1459 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_POSITION ) );
1460 cameraOrientationConstraint.AddSource( Source( freeLookCameraActor, Actor::Property::WORLD_POSITION ) );
1461 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_ORIENTATION ) );
1462 cameraOrientationConstraint.Apply();
1464 CameraActor lookAtCameraActor = CameraActor::New( stageSize );
1465 lookAtCameraActor.SetType( Camera::LOOK_AT_TARGET );
1466 lookAtCameraActor.SetTargetPosition( targetPosition );
1467 lookAtCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1469 stage.Add( target );
1470 stage.Add( freeLookCameraActor );
1471 stage.Add( lookAtCameraActor );
1473 // Create an arbitrary vector
1474 for( float x=-1.0f; x<=1.0f; x+=0.1f )
1476 for( float y=-1.0f; y<1.0f; y+=0.1f )
1478 for( float z=-1.0f; z<1.0f; z+=0.1f )
1480 Vector3 position( x, y, z );
1481 position.Normalize();
1484 freeLookCameraActor.SetPosition( position );
1485 lookAtCameraActor.SetPosition( position );
1487 application.SendNotification();
1488 application.Render();
1489 application.SendNotification();
1490 application.Render();
1491 Matrix freeLookViewMatrix;
1492 Matrix lookAtViewMatrix;
1493 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1494 lookAtCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( lookAtViewMatrix );
1496 Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
1498 Matrix freeLookTest( false );
1499 Matrix::Multiply( freeLookTest, freeLookViewMatrix, freeLookWorld );
1500 DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION );
1502 DALI_TEST_EQUALS( freeLookViewMatrix, lookAtViewMatrix, 0.01, TEST_LOCATION );
1509 int UtcDaliCameraActorCheckLookAtAndFreeLookViews03(void)
1511 TestApplication application;
1512 Stage stage = Stage::GetCurrent();
1513 Vector2 stageSize = stage.GetSize();
1515 Vector3 targetPosition( Vector3::ZERO );
1516 Vector3 cameraOffset( 0.0f, 0.0f, 100.0f );
1518 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1519 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1520 freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1522 Quaternion cameraOrientation( Radian( Degree( 180.0f ) ), Vector3::YAXIS );
1523 freeLookCameraActor.SetPosition( cameraOffset );
1524 freeLookCameraActor.SetOrientation( cameraOrientation );
1526 Actor cameraAnchor = Actor::New();
1527 cameraAnchor.Add( freeLookCameraActor );
1528 stage.Add( cameraAnchor );
1530 for( float angle = 1.0f; angle <= 180.0f; angle += 1.0f )
1532 Quaternion rotation( Radian( Degree( angle ) ), Vector3::YAXIS );
1534 freeLookCameraActor.SetPosition( rotation.Rotate( cameraOffset ) );
1535 cameraAnchor.SetOrientation( rotation );
1537 application.SendNotification();
1538 application.Render();
1539 application.SendNotification();
1540 application.Render();
1542 Matrix freeLookViewMatrix;
1543 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1545 Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
1547 Matrix freeLookTest( false );
1548 Matrix::Multiply( freeLookTest, freeLookViewMatrix, freeLookWorld );
1549 DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION );