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>
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 );
226 DALI_TEST_EQUALS( "LOOK_AT_TARGET", actor.GetProperty< std::string >( CameraActor::Property::TYPE ), TEST_LOCATION );
227 DALI_TEST_EQUALS( "LOOK_AT_TARGET", actor.GetCurrentProperty< std::string >( CameraActor::Property::TYPE ), TEST_LOCATION );
231 int UtcDaliCameraActorSetGetTypeN(void)
233 TestApplication application;
234 tet_infoline( "Testing Dali::CameraActor GetType (N)" );
238 Dali::Camera::Type cameraType = Dali::Camera::FREE_LOOK;
241 cameraType = actor.GetType();
243 catch ( Dali::DaliException& e )
245 DALI_TEST_PRINT_ASSERT( e );
246 DALI_TEST_ASSERT( e, "camera", TEST_LOCATION );
249 const CameraActor aConstActor;
253 cameraType = aConstActor.GetType();
255 catch ( Dali::DaliException& e )
257 DALI_TEST_PRINT_ASSERT( e );
258 DALI_TEST_ASSERT( e, "camera", TEST_LOCATION );
261 DALI_TEST_EQUALS( cameraType, Dali::Camera::FREE_LOOK, TEST_LOCATION );
265 int UtcDaliCameraActorSetFieldOfViewP(void)
267 TestApplication application;
268 tet_infoline( "Testing Dali::CameraActor Set Field of view (P)" );
270 CameraActor defaultCamera = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
271 const float defaultFieldOfView = defaultCamera.GetFieldOfView();
273 CameraActor actor = CameraActor::New();
274 DALI_TEST_EQUALS( actor.GetFieldOfView(), defaultFieldOfView, TEST_LOCATION );
276 float fieldOfView = Math::PI / 3.0f;
277 actor.SetFieldOfView( fieldOfView );
278 DALI_TEST_EQUALS( actor.GetFieldOfView(), fieldOfView, TEST_LOCATION );
281 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
282 DALI_TEST_EQUALS( fieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
286 int UtcDaliCameraActorSetFieldOfViewN(void)
288 TestApplication application;
289 tet_infoline( "Testing Dali::CameraActor Set Field of view (N)" );
291 CameraActor defaultCamera = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
292 const float defaultFieldOfView = defaultCamera.GetFieldOfView();
294 CameraActor actor = CameraActor::New();
295 DALI_TEST_EQUALS( actor.GetFieldOfView(), defaultFieldOfView, TEST_LOCATION );
297 float fieldOfView = Math::PI / 3.0f;
298 actor.SetFieldOfView( fieldOfView );
299 DALI_TEST_EQUALS( actor.GetFieldOfView(), fieldOfView, TEST_LOCATION );
302 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
303 DALI_TEST_EQUALS( fieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
307 int UtcDaliCameraActorGetFieldOfViewP(void)
309 TestApplication application;
310 tet_infoline( "Testing Dali::CameraActor Get Field of view (P)" );
311 const Vector2 size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT );
313 CameraActor defaultCamera = CameraActor::New( size );
315 const float cameraZ = 2.0f * std::max( size.width, size.height );
316 const float expectedFieldOfView = 2.0f * std::atan( size.height * 0.5f / cameraZ );
318 CameraActor actor = CameraActor::New();
319 DALI_TEST_EQUALS( actor.GetFieldOfView(), expectedFieldOfView, TEST_LOCATION );
322 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
323 DALI_TEST_EQUALS( expectedFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
327 int UtcDaliCameraActorGetFieldOfViewN(void)
329 TestApplication application;
330 tet_infoline( "Testing Dali::CameraActor Get Field of view (N)" );
332 CameraActor defaultCamera = CameraActor::New();
334 bool asserted = true;
337 defaultCamera.GetFieldOfView();
339 catch( Dali::DaliException& e )
341 DALI_TEST_PRINT_ASSERT( e );
342 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
345 DALI_TEST_CHECK( asserted );
350 int UtcDaliCameraActorSetAspectRatioP(void)
352 TestApplication application;
353 tet_infoline( "Testing Dali::CameraActor Set Aspect Ratio (P)" );
355 CameraActor actor = CameraActor::New();
356 DALI_TEST_EQUALS( actor.GetAspectRatio(), static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT ), TEST_LOCATION );
358 // Set an initial value to confirm a further set changes it.
359 float aspect = 4.0f / 3.0f;
360 actor.SetAspectRatio( aspect );
361 DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
363 aspect = 16.0f / 9.0f;
364 actor.SetAspectRatio( aspect );
365 DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
370 int UtcDaliCameraActorSetAspectRatioN(void)
372 TestApplication application;
373 tet_infoline( "Testing Dali::CameraActor Set Aspect Ratio (N)" );
377 bool asserted = true;
380 actor.SetAspectRatio( 16.0f / 9.0f );
382 catch( Dali::DaliException& e )
384 DALI_TEST_PRINT_ASSERT( e );
385 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
388 DALI_TEST_CHECK( asserted );
393 int UtcDaliCameraActorGetAspectRatioP(void)
395 TestApplication application;
396 tet_infoline("Testing Dali::CameraActor Get Aspect Ratio");
398 CameraActor actor = CameraActor::New();
399 float defaultAspect = static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT );
401 DALI_TEST_EQUALS( actor.GetAspectRatio(), defaultAspect, TEST_LOCATION );
404 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
405 DALI_TEST_EQUALS( defaultAspect, value, FLOAT_EPSILON, TEST_LOCATION );
410 int UtcDaliCameraActorGetAspectRatioN(void)
412 TestApplication application;
413 tet_infoline( "Testing Dali::CameraActor Get Aspect Ratio (N)" );
417 bool asserted = true;
420 actor.GetAspectRatio();
422 catch( Dali::DaliException& e )
424 DALI_TEST_PRINT_ASSERT( e );
425 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
429 DALI_TEST_CHECK( asserted );
434 int UtcDaliCameraActorSetNearClippingPlaneP(void)
436 TestApplication application;
437 tet_infoline( "Testing Dali::CameraActor Set Near clipping plane (P)" );
439 CameraActor actor = CameraActor::New();
441 // Set a value so we are not relying on a particular default for this test case.
442 actor.SetNearClippingPlane( 200.0f );
443 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, TEST_LOCATION );
445 actor.SetNearClippingPlane( 400.0f );
446 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 400.0f, TEST_LOCATION );
448 // Check setting the property.
449 actor.SetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE, Property::Value( 300.0f ) );
450 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 300.0f, FLOAT_EPSILON, TEST_LOCATION );
454 int UtcDaliCameraActorSetNearClippingPlaneN(void)
456 TestApplication application;
457 tet_infoline( "Testing Dali::CameraActor Set Near clipping plane (N)" );
461 bool asserted = true;
464 actor.SetNearClippingPlane( 200.0f );
466 catch( Dali::DaliException& e )
468 DALI_TEST_PRINT_ASSERT( e );
469 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
473 DALI_TEST_CHECK( asserted );
478 int UtcDaliCameraActorGetNearClippingPlaneP(void)
480 TestApplication application;
481 tet_infoline( "Testing Dali::CameraActor Get Near clipping plane (P)" );
483 // Check the default value.
484 CameraActor actor = CameraActor::New();
485 float defaultValue = 800.0f;
486 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), defaultValue, TEST_LOCATION );
488 // Check getting the property.
490 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
491 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
495 int UtcDaliCameraActorGetNearClippingPlaneN(void)
497 TestApplication application;
498 tet_infoline( "Testing Dali::CameraActor Get Near clipping plane (N)" );
501 bool asserted = true;
504 actor.GetNearClippingPlane();
506 catch( Dali::DaliException& e )
508 DALI_TEST_PRINT_ASSERT( e );
509 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
513 DALI_TEST_CHECK( asserted );
518 int UtcDaliCameraActorSetFarClippingPlaneP(void)
520 TestApplication application;
521 tet_infoline( "Testing Dali::CameraActor Set Far clipping plane (P)" );
523 CameraActor actor = CameraActor::New();
525 // Set a value so we are not relying on a particular default for this test case.
526 actor.SetFarClippingPlane( 2000.0f );
527 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 2000.0f, TEST_LOCATION );
529 actor.SetFarClippingPlane( 4000.0f );
530 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 4000.0f, TEST_LOCATION );
532 // Check setting the property.
533 actor.SetProperty( CameraActor::Property::FAR_PLANE_DISTANCE, 2000.0f );
534 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 2000.0f, FLOAT_EPSILON, TEST_LOCATION );
538 int UtcDaliCameraActorSetFarClippingPlaneN(void)
540 TestApplication application;
541 tet_infoline( "Testing Dali::CameraActor Set Far clipping plane (N)" );
545 bool asserted = true;
548 actor.SetFarClippingPlane( 2000.0f );
550 catch( Dali::DaliException& e )
552 DALI_TEST_PRINT_ASSERT( e );
553 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
557 DALI_TEST_CHECK( asserted );
562 int UtcDaliCameraActorGetFarClippingPlaneP(void)
564 TestApplication application;
565 tet_infoline( "Testing Dali::CameraActor Get Far clipping plane (P)" );
567 CameraActor actor = CameraActor::New();
568 float defaultValue = 800.0f + ( 0xFFFF >> 4 );
569 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), defaultValue, TEST_LOCATION );
571 // Check getting the property.
573 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
574 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
578 int UtcDaliCameraActorGetFarClippingPlaneN(void)
580 TestApplication application;
581 tet_infoline( "Testing Dali::CameraActor Get Far clipping plane (N)" );
585 bool asserted = true;
588 actor.GetFarClippingPlane();
590 catch( Dali::DaliException& e )
592 DALI_TEST_PRINT_ASSERT( e );
593 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
597 DALI_TEST_CHECK( asserted );
602 int UtcDaliCameraActorSetTargetPositionP(void)
604 TestApplication application;
605 tet_infoline( "Testing Dali::CameraActor Set Target Position (P)" );
607 CameraActor actor = CameraActor::New();
609 Vector3 target1( 10.0f, 20.0f, 30.0f );
610 Vector3 target2( 15.0f, 25.0f, 35.0f );
612 // Set a value so we are not relying on a particular default for this test case.
613 actor.SetTargetPosition( target1 );
614 DALI_TEST_EQUALS( actor.GetTargetPosition(), target1, TEST_LOCATION );
616 actor.SetTargetPosition( target2 );
617 DALI_TEST_EQUALS( actor.GetTargetPosition(), target2, TEST_LOCATION );
619 // Check setting the property.
620 actor.SetProperty( CameraActor::Property::TARGET_POSITION, target1 );
621 DALI_TEST_EQUALS( actor.GetTargetPosition(), target1, FLOAT_EPSILON, TEST_LOCATION );
625 int UtcDaliCameraActorSetTargetPositionN(void)
627 TestApplication application;
628 tet_infoline( "Testing Dali::CameraActor Set Target Position (N)" );
632 bool asserted = true;
635 actor.SetTargetPosition( Vector3( 10.0f, 20.0f, 30.0f ) );
637 catch( Dali::DaliException& e )
639 DALI_TEST_PRINT_ASSERT( e );
640 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
643 DALI_TEST_CHECK( asserted );
648 int UtcDaliCameraActorGetTargetPositionP(void)
650 TestApplication application;
651 tet_infoline( "Testing Dali::CameraActor Get Target Position (P)" );
653 CameraActor actor = CameraActor::New();
654 Vector3 defaultValue( Vector3::ZERO );
655 DALI_TEST_EQUALS( actor.GetTargetPosition(), defaultValue, TEST_LOCATION );
657 // Check getting the property.
659 actor.GetProperty( CameraActor::Property::TARGET_POSITION ).Get( value );
660 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
664 int UtcDaliCameraActorGetTargetPositionN(void)
666 TestApplication application;
667 tet_infoline( "Testing Dali::CameraActor Get Target Position (N)" );
671 bool asserted = true;
674 actor.GetTargetPosition();
676 catch( Dali::DaliException& e )
678 DALI_TEST_PRINT_ASSERT( e );
679 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
682 DALI_TEST_CHECK( asserted );
687 int UtcDaliCameraActorSetInvertYAxisP(void)
689 TestApplication application;
690 tet_infoline( "Testing Dali::CameraActor Set InvertYAxis (P)" );
692 CameraActor actor = CameraActor::New();
694 // Set a value so we are not relying on a particular default for this test case.
695 actor.SetInvertYAxis( false );
696 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
698 actor.SetInvertYAxis( true );
699 DALI_TEST_EQUALS( actor.GetInvertYAxis(), true, TEST_LOCATION );
701 actor.SetProperty( CameraActor::Property::INVERT_Y_AXIS, false );
702 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
706 int UtcDaliCameraActorSetInvertYAxisN(void)
708 TestApplication application;
709 tet_infoline( "Testing Dali::CameraActor Set InvertYAxis (N)" );
713 bool asserted = true;
716 actor.SetInvertYAxis( false );
718 catch( Dali::DaliException& e )
720 DALI_TEST_PRINT_ASSERT( e );
721 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
724 DALI_TEST_CHECK( asserted );
728 int UtcDaliCameraActorGetInvertYAxisP(void)
730 TestApplication application;
731 tet_infoline( "Testing Dali::CameraActor Get InvertYAxis (P)" );
733 // Check the default value.
734 CameraActor actor = CameraActor::New();
735 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
737 // Check getting the property.
739 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
740 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
744 int UtcDaliCameraActorGetInvertYAxisN(void)
746 TestApplication application;
747 tet_infoline( "Testing Dali::CameraActor Get InvertYAxis (N)" );
751 bool asserted = true;
754 actor.GetInvertYAxis();
756 catch( Dali::DaliException& e )
758 DALI_TEST_PRINT_ASSERT( e );
759 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
762 DALI_TEST_CHECK( asserted );
766 int UtcDaliCameraActorSetPerspectiveProjectionP(void)
768 TestApplication application;
769 tet_infoline( "Testing Dali::CameraActor::SetPerspectiveProjection (P)" );
771 CameraActor actor = CameraActor::New();
772 actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
774 DALI_TEST_CHECK( actor );
777 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
778 DALI_TEST_EQUALS( 0.666666f, value, FLOAT_EPSILON, TEST_LOCATION );
779 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
780 DALI_TEST_EQUALS( 0.489957f, value, FLOAT_EPSILON, TEST_LOCATION );
781 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
782 DALI_TEST_EQUALS( 150.f, value, FLOAT_EPSILON, TEST_LOCATION );
783 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
784 DALI_TEST_EQUALS( 4245.f, value, FLOAT_EPSILON, TEST_LOCATION );
786 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
791 int UtcDaliCameraActorSetPerspectiveProjectionN(void)
793 TestApplication application;
794 tet_infoline( "Testing Dali::CameraActor::SetPerspectiveProjection (N)" );
796 Stage stage = Stage::GetCurrent();
797 Vector2 stageSize = stage.GetSize();
799 CameraActor actor = CameraActor::New();
801 // Check that setting perspective projection without a size (using zero size) uses the stages size.
802 actor.SetPerspectiveProjection( Size::ZERO );
804 float nearClippingPlane = std::max( stageSize.width, stageSize.height );
805 float farClippingPlane = nearClippingPlane + static_cast<float>( 0xFFFF >> 4 );
807 DALI_TEST_EQUALS( nearClippingPlane, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
808 DALI_TEST_EQUALS( farClippingPlane, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
809 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
814 int UtcDaliCameraActorSetOrthographicProjectionP1(void)
816 TestApplication application;
817 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,1)" );
819 CameraActor actor = CameraActor::New( Size( 1080.0f, 1920.0f ) );
820 DALI_TEST_CHECK( actor );
822 Stage::GetCurrent().Add( actor );
824 actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
825 application.SendNotification();
826 application.Render( 0 );
827 application.Render();
828 application.SendNotification();
830 float defaultAspectRatio;
831 float defaultFieldOfView;
832 float defaultNearPlaneDistance;
833 float defaultFarPlaneDistance;
834 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
835 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
836 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
837 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
838 Vector3 defaultPos = actor.GetCurrentPosition();
840 actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
842 application.SendNotification();
843 application.Render( 0 );
844 application.Render();
845 application.SendNotification();
848 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
849 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
850 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
851 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
852 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
853 DALI_TEST_EQUALS( defaultNearPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION );
854 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
855 DALI_TEST_EQUALS( defaultFarPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION );
857 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
858 DALI_TEST_EQUALS( -540.0f, value, FLOAT_EPSILON, TEST_LOCATION );
859 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
860 DALI_TEST_EQUALS( 540.0f, value, FLOAT_EPSILON, TEST_LOCATION );
861 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
862 DALI_TEST_EQUALS( 960.0f, value, FLOAT_EPSILON, TEST_LOCATION );
863 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
864 DALI_TEST_EQUALS( -960.0f, value, FLOAT_EPSILON, TEST_LOCATION );
866 Vector3 pos = actor.GetCurrentPosition();
867 DALI_TEST_EQUALS( defaultPos.z, pos.z, 0.001f, TEST_LOCATION );
869 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
873 int UtcDaliCameraActorSetOrthographicProjectionN(void)
875 TestApplication application;
876 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (N)" );
879 bool asserted = true;
882 actor.GetProjectionMode();
884 catch( Dali::DaliException& e )
886 DALI_TEST_PRINT_ASSERT( e );
887 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
890 DALI_TEST_CHECK( asserted );
894 int UtcDaliCameraActorSetOrthographicProjectionP2(void)
896 TestApplication application;
897 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,2)" );
899 CameraActor actor = CameraActor::New();
900 DALI_TEST_CHECK( actor );
902 float defaultAspectRatio;
903 float defaultFieldOfView;
904 float defaultNearPlaneDistance;
905 float defaultFarPlaneDistance;
906 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
907 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
908 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
909 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
911 // Check setting with specific near and far plane distances.
912 actor.SetOrthographicProjection( -100.0f, 200.0f, -300.0f, 500.0f, 400.0f, 4000.0f );
915 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
916 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
917 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
918 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
919 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
920 DALI_TEST_EQUALS( 400.0f, value, FLOAT_EPSILON, TEST_LOCATION );
921 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
922 DALI_TEST_EQUALS( 4000.0f, value, FLOAT_EPSILON, TEST_LOCATION );
924 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
925 DALI_TEST_EQUALS( -100.0f, value, FLOAT_EPSILON, TEST_LOCATION );
926 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
927 DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION );
928 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
929 DALI_TEST_EQUALS( -300.0f, value, FLOAT_EPSILON, TEST_LOCATION );
930 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
931 DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION );
933 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
938 int UtcDaliCameraActorSetOrthographicProjectionP3(void)
940 TestApplication application;
941 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,3)" );
943 CameraActor actor = CameraActor::New();
944 DALI_TEST_CHECK( actor );
946 float defaultAspectRatio;
947 float defaultFieldOfView;
948 float defaultNearPlaneDistance;
949 float defaultFarPlaneDistance;
950 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
951 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
952 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
953 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
955 actor.SetProjectionMode( Dali::Camera::ORTHOGRAPHIC_PROJECTION );
957 actor.SetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE, -100.0f );
958 actor.SetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE, 200.0f );
959 actor.SetProperty( CameraActor::Property::TOP_PLANE_DISTANCE, -300.0f );
960 actor.SetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE, 500.0f );
961 actor.SetNearClippingPlane( 400.0f );
962 actor.SetFarClippingPlane( 4000.0f );
965 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
966 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
967 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
968 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
969 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
970 DALI_TEST_EQUALS( 400.0f, value, FLOAT_EPSILON, TEST_LOCATION );
971 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
972 DALI_TEST_EQUALS( 4000.0f, value, FLOAT_EPSILON, TEST_LOCATION );
974 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
975 DALI_TEST_EQUALS( -100.0f, value, FLOAT_EPSILON, TEST_LOCATION );
976 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
977 DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION );
978 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
979 DALI_TEST_EQUALS( -300.0f, value, FLOAT_EPSILON, TEST_LOCATION );
980 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
981 DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION );
983 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
984 std::string stringValue;
985 actor.GetProperty( CameraActor::Property::PROJECTION_MODE ).Get( stringValue );
986 DALI_TEST_EQUALS( stringValue, "ORTHOGRAPHIC_PROJECTION", TEST_LOCATION );
990 int UtcDaliCameraActorSetProjectionModeP(void)
992 TestApplication application;
993 tet_infoline( "Testing Dali::CameraActor::SetProjectionModeP (P)" );
995 CameraActor actor = CameraActor::New();
997 // Check that changing the projection mode alone does not alter other presets.
998 actor.SetNearClippingPlane( 200.0f );
999 actor.SetFarClippingPlane( 400.0f );
1001 actor.SetProjectionMode( Dali::Camera::PERSPECTIVE_PROJECTION );
1003 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1004 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION );
1005 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION );
1007 actor.SetProjectionMode( Dali::Camera::ORTHOGRAPHIC_PROJECTION );
1009 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1010 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION );
1011 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION );
1013 // Check setting the property.
1014 Property::Value setValue = "PERSPECTIVE_PROJECTION";
1015 actor.SetProperty( CameraActor::Property::PROJECTION_MODE, setValue );
1016 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1020 int UtcDaliCameraActorSetProjectionModeN(void)
1022 TestApplication application;
1023 tet_infoline( "Testing Dali::CameraActor::SetProjectionModeP (N)" );
1027 bool asserted = true;
1030 actor.SetProjectionMode( Dali::Camera::PERSPECTIVE_PROJECTION );
1032 catch( Dali::DaliException& e )
1034 DALI_TEST_PRINT_ASSERT( e );
1035 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
1038 DALI_TEST_CHECK( asserted );
1042 int UtcDaliCameraActorGetProjectionModeP(void)
1044 TestApplication application;
1045 tet_infoline( "Testing Dali::CameraActor::GetPerspectiveProjection (P)" );
1047 CameraActor actor = CameraActor::New();
1049 actor.SetOrthographicProjection( Size::ONE );
1050 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1052 actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
1053 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1055 // Check getting the property.
1056 std::string stringValue;
1057 actor.GetProperty( CameraActor::Property::PROJECTION_MODE ).Get( stringValue );
1058 DALI_TEST_EQUALS( stringValue, "PERSPECTIVE_PROJECTION", TEST_LOCATION );
1062 int UtcDaliCameraActorGetProjectionModeN(void)
1064 TestApplication application;
1065 tet_infoline( "Testing Dali::CameraActor::GetProjectionMode (N)" );
1069 bool asserted = true;
1072 actor.GetProjectionMode();
1074 catch( Dali::DaliException& e )
1076 DALI_TEST_PRINT_ASSERT( e );
1077 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
1080 DALI_TEST_CHECK( asserted );
1084 int UtcDaliCameraActorSetCameraOffStage(void)
1086 TestApplication application;
1087 tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
1089 CameraActor actor = CameraActor::New();
1091 actor.SetType( Camera::FREE_LOOK );
1092 actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
1093 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1094 actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
1095 actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
1096 actor.SetProjectionMode( Camera::PERSPECTIVE_PROJECTION );
1098 actor.SetInvertYAxis( false );
1100 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );//change to machine epsilon
1101 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1102 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1103 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1104 DALI_TEST_EQUALS( Camera::PERSPECTIVE_PROJECTION, actor.GetProjectionMode(), TEST_LOCATION );
1105 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1109 actor.GetProperty( CameraActor::Property::ASPECT_RATIO).Get( value );
1110 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
1111 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW).Get( value );
1112 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
1113 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE).Get( value );
1114 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1115 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE).Get( value );
1116 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1117 actor.GetProperty( CameraActor::Property::PROJECTION_MODE).Get( sValue );
1118 DALI_TEST_EQUALS( "PERSPECTIVE_PROJECTION", sValue, TEST_LOCATION );
1120 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS).Get( bValue );
1121 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1125 int UtcDaliCameraActorSetCameraOnStage(void)
1127 TestApplication application;
1128 tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
1130 CameraActor actor = CameraActor::New();
1131 Stage::GetCurrent().Add( actor );
1132 application.Render( 0 );
1133 application.SendNotification();
1135 actor.SetType( Camera::LOOK_AT_TARGET );
1136 actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
1137 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1138 actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
1139 actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
1140 actor.SetInvertYAxis( false );
1142 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1144 // Will need 2 frames to ensure both buffers are set to same values:
1145 application.Render();
1146 application.SendNotification();
1147 application.Render();
1148 application.SendNotification();
1150 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
1151 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1152 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1153 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1154 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1157 actor.GetProperty( CameraActor::Property::TYPE ).Get( sValue );
1158 DALI_TEST_EQUALS( sValue, "LOOK_AT_TARGET", TEST_LOCATION );
1161 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
1162 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
1163 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
1164 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
1165 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
1166 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1167 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value);
1168 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1171 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
1172 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1176 int UtcDaliCameraActorGetCamera(void)
1178 TestApplication application;
1179 tet_infoline( "Testing Dali::CameraActor::GetCamera()" );
1181 CameraActor actor = CameraActor::New();
1183 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1185 DALI_TEST_EQUALS( actor.GetAspectRatio(), TEST_ASPECT_RATIO, FLOAT_EPSILON, TEST_LOCATION );
1187 actor.SetProperty( CameraActor::Property::TYPE, "FREE_LOOK" );
1188 actor.SetProperty( CameraActor::Property::ASPECT_RATIO, TEST_ASPECT_RATIO );
1189 actor.SetProperty( CameraActor::Property::FIELD_OF_VIEW, TEST_FIELD_OF_VIEW );
1190 actor.SetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE, TEST_NEAR_PLANE_DISTANCE );
1191 actor.SetProperty( CameraActor::Property::FAR_PLANE_DISTANCE, TEST_FAR_PLANE_DISTANCE );
1193 DALI_TEST_EQUALS( Camera::FREE_LOOK, actor.GetType(), TEST_LOCATION );
1194 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
1195 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1196 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1197 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1201 int UtcDaliCameraActorDefaultProperties(void)
1203 TestApplication application;
1204 tet_infoline( "Testing Dali::CameraActor DefaultProperties" );
1206 CameraActor actor = CameraActor::New();
1207 Stage stage = Stage::GetCurrent();
1209 stage.GetRenderTaskList().GetTask(0).SetCameraActor( actor );
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 Actor actor = CreateRenderableActor(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 Actor actor = CreateRenderableActor( image, RENDER_SHADOW_VERTEX_SOURCE, RENDER_SHADOW_FRAGMENT_SOURCE );
1312 actor.SetSize( 100.0f, 100.0f );
1313 Stage::GetCurrent().Add( actor );
1315 Matrix projectionMatrix;
1318 camera.GetProperty( CameraActor::CameraActor::Property::PROJECTION_MATRIX ).Get( projectionMatrix );
1319 camera.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( viewMatrix );
1321 actor.RegisterProperty( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
1322 actor.RegisterProperty( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
1324 Property::Index projectionMatrixPropertyIndex = actor.GetPropertyIndex( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME );
1325 Property::Index viewMatrixPropertyIndex = actor.GetPropertyIndex( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME );
1327 Constraint projectionMatrixConstraint = Constraint::New<Dali::Matrix>( actor, projectionMatrixPropertyIndex, EqualToConstraint() );
1328 projectionMatrixConstraint.AddSource( Source( camera, CameraActor::Property::PROJECTION_MATRIX ) );
1329 Constraint viewMatrixConstraint = Constraint::New<Dali::Matrix>( actor, viewMatrixPropertyIndex, EqualToConstraint() );
1330 viewMatrixConstraint.AddSource( Source( camera, CameraActor::Property::VIEW_MATRIX ) );
1332 projectionMatrixConstraint.Apply();
1333 viewMatrixConstraint.Apply();
1335 application.SendNotification();
1336 application.Render();
1338 // Test effects of Constraint.
1339 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME.c_str(), projectionMatrix) );
1341 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME.c_str(), viewMatrix ) );
1345 int UtcDaliCameraActorAnimatedProperties(void)
1347 TestApplication application;
1348 tet_infoline( "Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()" );
1350 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1351 Actor actor = Actor::New();
1352 actor.SetSize( 100.0f, 100.0f );
1353 Stage::GetCurrent().Add( actor );
1355 Constraint constraint = Constraint::New<Dali::Vector3>( actor, Actor::Property::POSITION, EqualToConstraint() );
1356 constraint.AddSource( Source( camera, Actor::Property::POSITION ) );
1359 camera.SetPosition( 100.0f, 200.0f, 300.0f );
1360 application.SendNotification();
1361 application.Render();
1363 DALI_TEST_EQUALS( actor.GetCurrentPosition(), Vector3( 100.0f, 200.0f, 300.0f ), TEST_LOCATION);
1367 int UtcDaliCameraActorPropertyIndices(void)
1369 TestApplication application;
1370 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1372 Actor basicActor = Actor::New();
1373 Property::IndexContainer indices;
1374 camera.GetPropertyIndices( indices );
1375 DALI_TEST_CHECK( indices.Size() > basicActor.GetPropertyCount() );
1376 DALI_TEST_EQUALS( indices.Size(), camera.GetPropertyCount(), TEST_LOCATION );
1380 int UtcDaliCameraActorCheckLookAtAndFreeLookViews01(void)
1382 TestApplication application;
1383 Stage stage = Stage::GetCurrent();
1384 Vector2 stageSize = stage.GetSize();
1386 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1387 freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1388 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1390 Vector3 targetPosition( 30.0f, 240.0f, -256.0f );
1391 Actor target = Actor::New();
1392 target.SetParentOrigin( ParentOrigin::CENTER );
1393 target.SetPosition( targetPosition );
1395 Constraint cameraOrientationConstraint = Constraint::New<Quaternion> ( freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt );
1396 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_POSITION ) );
1397 cameraOrientationConstraint.AddSource( Source( freeLookCameraActor, Actor::Property::WORLD_POSITION ) );
1398 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_ORIENTATION ) );
1399 cameraOrientationConstraint.Apply();
1401 CameraActor lookAtCameraActor = CameraActor::New( stageSize );
1402 lookAtCameraActor.SetType( Camera::LOOK_AT_TARGET );
1403 lookAtCameraActor.SetTargetPosition( targetPosition );
1404 lookAtCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1406 stage.Add( target );
1407 stage.Add( freeLookCameraActor );
1408 stage.Add( lookAtCameraActor );
1410 // Create an arbitrary vector
1411 for( float x=-1.0f; x<=1.0f; x+=0.1f )
1413 for( float y=-1.0f; y<1.0f; y+=0.1f )
1415 for( float z=-1.0f; z<1.0f; z+=0.1f )
1417 Vector3 position( x, y, z );
1418 position.Normalize();
1421 freeLookCameraActor.SetPosition( position );
1422 lookAtCameraActor.SetPosition( position );
1424 application.SendNotification();
1425 application.Render();
1426 application.SendNotification();
1427 application.Render();
1428 Matrix freeLookViewMatrix;
1429 Matrix lookAtViewMatrix;
1430 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1431 lookAtCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( lookAtViewMatrix );
1433 DALI_TEST_EQUALS( freeLookViewMatrix, lookAtViewMatrix, 0.01, TEST_LOCATION );
1440 int UtcDaliCameraActorCheckLookAtAndFreeLookViews02(void)
1442 TestApplication application;
1443 Stage stage = Stage::GetCurrent();
1444 Vector2 stageSize = stage.GetSize();
1446 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1447 freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1448 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1450 Vector3 targetPosition( 30.0f, 240.0f, -256.0f );
1451 Actor target = Actor::New();
1452 target.SetParentOrigin( ParentOrigin::CENTER );
1453 target.SetPosition( targetPosition );
1455 Constraint cameraOrientationConstraint = Constraint::New<Quaternion> ( freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt );
1456 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_POSITION ) );
1457 cameraOrientationConstraint.AddSource( Source( freeLookCameraActor, Actor::Property::WORLD_POSITION ) );
1458 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_ORIENTATION ) );
1459 cameraOrientationConstraint.Apply();
1461 CameraActor lookAtCameraActor = CameraActor::New( stageSize );
1462 lookAtCameraActor.SetType( Camera::LOOK_AT_TARGET );
1463 lookAtCameraActor.SetTargetPosition( targetPosition );
1464 lookAtCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1466 stage.Add( target );
1467 stage.Add( freeLookCameraActor );
1468 stage.Add( lookAtCameraActor );
1469 stage.GetRenderTaskList().GetTask(0).SetCameraActor( freeLookCameraActor );
1471 // Create an arbitrary vector
1472 for( float x=-1.0f; x<=1.0f; x+=0.1f )
1474 for( float y=-1.0f; y<1.0f; y+=0.1f )
1476 for( float z=-1.0f; z<1.0f; z+=0.1f )
1478 Vector3 position( x, y, z );
1479 position.Normalize();
1482 freeLookCameraActor.SetPosition( position );
1483 lookAtCameraActor.SetPosition( position );
1485 application.SendNotification();
1486 application.Render();
1487 application.SendNotification();
1488 application.Render();
1489 Matrix freeLookViewMatrix;
1490 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1492 Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
1494 Matrix freeLookTest( false );
1495 Matrix::Multiply( freeLookTest, freeLookViewMatrix, freeLookWorld );
1496 DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION );
1504 int UtcDaliCameraActorCheckLookAtAndFreeLookViews03(void)
1506 TestApplication application;
1507 Stage stage = Stage::GetCurrent();
1508 Vector2 stageSize = stage.GetSize();
1510 Vector3 targetPosition( Vector3::ZERO );
1511 Vector3 cameraOffset( 0.0f, 0.0f, 100.0f );
1513 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1514 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1515 freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1517 Quaternion cameraOrientation( Radian( Degree( 180.0f ) ), Vector3::YAXIS );
1518 freeLookCameraActor.SetPosition( cameraOffset );
1519 freeLookCameraActor.SetOrientation( cameraOrientation );
1521 Actor cameraAnchor = Actor::New();
1522 cameraAnchor.Add( freeLookCameraActor );
1523 stage.Add( cameraAnchor );
1524 stage.GetRenderTaskList().GetTask(0).SetCameraActor( freeLookCameraActor );
1526 for( float angle = 1.0f; angle <= 180.0f; angle += 1.0f )
1528 Quaternion rotation( Radian( Degree( angle ) ), Vector3::YAXIS );
1530 freeLookCameraActor.SetPosition( rotation.Rotate( cameraOffset ) );
1531 cameraAnchor.SetOrientation( rotation );
1533 application.SendNotification();
1534 application.Render();
1535 application.SendNotification();
1536 application.Render();
1538 Matrix freeLookViewMatrix;
1539 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1541 Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
1543 Matrix freeLookTest( false );
1544 Matrix::Multiply( freeLookTest, freeLookViewMatrix, freeLookWorld );
1545 DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION );