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( cameraType, 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 );
352 int UtcDaliCameraActorSetAspectRatioP(void)
354 TestApplication application;
355 tet_infoline( "Testing Dali::CameraActor Set Aspect Ratio (P)" );
357 CameraActor actor = CameraActor::New();
358 DALI_TEST_EQUALS( actor.GetAspectRatio(), static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT ), TEST_LOCATION );
360 // Set an initial value to confirm a further set changes it.
361 float aspect = 4.0f / 3.0f;
362 actor.SetAspectRatio( aspect );
363 DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
365 aspect = 16.0f / 9.0f;
366 actor.SetAspectRatio( aspect );
367 DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
372 int UtcDaliCameraActorSetAspectRatioN(void)
374 TestApplication application;
375 tet_infoline( "Testing Dali::CameraActor Set Aspect Ratio (N)" );
379 bool asserted = true;
382 actor.SetAspectRatio( 16.0f / 9.0f );
384 catch( Dali::DaliException& e )
386 DALI_TEST_PRINT_ASSERT( e );
387 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
390 DALI_TEST_CHECK( asserted );
395 int UtcDaliCameraActorGetAspectRatioP(void)
397 TestApplication application;
398 tet_infoline("Testing Dali::CameraActor Get Aspect Ratio");
400 CameraActor actor = CameraActor::New();
401 float defaultAspect = static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT );
403 DALI_TEST_EQUALS( actor.GetAspectRatio(), defaultAspect, TEST_LOCATION );
406 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
407 DALI_TEST_EQUALS( defaultAspect, value, FLOAT_EPSILON, TEST_LOCATION );
412 int UtcDaliCameraActorGetAspectRatioN(void)
414 TestApplication application;
415 tet_infoline( "Testing Dali::CameraActor Get Aspect Ratio (N)" );
419 bool asserted = true;
422 actor.GetAspectRatio();
424 catch( Dali::DaliException& e )
426 DALI_TEST_PRINT_ASSERT( e );
427 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
431 DALI_TEST_CHECK( asserted );
436 int UtcDaliCameraActorSetNearClippingPlaneP(void)
438 TestApplication application;
439 tet_infoline( "Testing Dali::CameraActor Set Near clipping plane (P)" );
441 CameraActor actor = CameraActor::New();
443 // Set a value so we are not relying on a particular default for this test case.
444 actor.SetNearClippingPlane( 200.0f );
445 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, TEST_LOCATION );
447 actor.SetNearClippingPlane( 400.0f );
448 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 400.0f, TEST_LOCATION );
450 // Check setting the property.
451 actor.SetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE, Property::Value( 300.0f ) );
452 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 300.0f, FLOAT_EPSILON, TEST_LOCATION );
456 int UtcDaliCameraActorSetNearClippingPlaneN(void)
458 TestApplication application;
459 tet_infoline( "Testing Dali::CameraActor Set Near clipping plane (N)" );
463 bool asserted = true;
466 actor.SetNearClippingPlane( 200.0f );
468 catch( Dali::DaliException& e )
470 DALI_TEST_PRINT_ASSERT( e );
471 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
475 DALI_TEST_CHECK( asserted );
480 int UtcDaliCameraActorGetNearClippingPlaneP(void)
482 TestApplication application;
483 tet_infoline( "Testing Dali::CameraActor Get Near clipping plane (P)" );
485 // Check the default value.
486 CameraActor actor = CameraActor::New();
487 float defaultValue = 800.0f;
488 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), defaultValue, TEST_LOCATION );
490 // Check getting the property.
492 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
493 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
497 int UtcDaliCameraActorGetNearClippingPlaneN(void)
499 TestApplication application;
500 tet_infoline( "Testing Dali::CameraActor Get Near clipping plane (N)" );
503 bool asserted = true;
506 actor.GetNearClippingPlane();
508 catch( Dali::DaliException& e )
510 DALI_TEST_PRINT_ASSERT( e );
511 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
515 DALI_TEST_CHECK( asserted );
520 int UtcDaliCameraActorSetFarClippingPlaneP(void)
522 TestApplication application;
523 tet_infoline( "Testing Dali::CameraActor Set Far clipping plane (P)" );
525 CameraActor actor = CameraActor::New();
527 // Set a value so we are not relying on a particular default for this test case.
528 actor.SetFarClippingPlane( 2000.0f );
529 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 2000.0f, TEST_LOCATION );
531 actor.SetFarClippingPlane( 4000.0f );
532 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 4000.0f, TEST_LOCATION );
534 // Check setting the property.
535 actor.SetProperty( CameraActor::Property::FAR_PLANE_DISTANCE, 2000.0f );
536 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 2000.0f, FLOAT_EPSILON, TEST_LOCATION );
540 int UtcDaliCameraActorSetFarClippingPlaneN(void)
542 TestApplication application;
543 tet_infoline( "Testing Dali::CameraActor Set Far clipping plane (N)" );
547 bool asserted = true;
550 actor.SetFarClippingPlane( 2000.0f );
552 catch( Dali::DaliException& e )
554 DALI_TEST_PRINT_ASSERT( e );
555 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
559 DALI_TEST_CHECK( asserted );
564 int UtcDaliCameraActorGetFarClippingPlaneP(void)
566 TestApplication application;
567 tet_infoline( "Testing Dali::CameraActor Get Far clipping plane (P)" );
569 CameraActor actor = CameraActor::New();
570 float defaultValue = 800.0f + ( 0xFFFF >> 4 );
571 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), defaultValue, TEST_LOCATION );
573 // Check getting the property.
575 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
576 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
580 int UtcDaliCameraActorGetFarClippingPlaneN(void)
582 TestApplication application;
583 tet_infoline( "Testing Dali::CameraActor Get Far clipping plane (N)" );
587 bool asserted = true;
590 actor.GetFarClippingPlane();
592 catch( Dali::DaliException& e )
594 DALI_TEST_PRINT_ASSERT( e );
595 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
599 DALI_TEST_CHECK( asserted );
604 int UtcDaliCameraActorSetTargetPositionP(void)
606 TestApplication application;
607 tet_infoline( "Testing Dali::CameraActor Set Target Position (P)" );
609 CameraActor actor = CameraActor::New();
611 Vector3 target1( 10.0f, 20.0f, 30.0f );
612 Vector3 target2( 15.0f, 25.0f, 35.0f );
614 // Set a value so we are not relying on a particular default for this test case.
615 actor.SetTargetPosition( target1 );
616 DALI_TEST_EQUALS( actor.GetTargetPosition(), target1, TEST_LOCATION );
618 actor.SetTargetPosition( target2 );
619 DALI_TEST_EQUALS( actor.GetTargetPosition(), target2, TEST_LOCATION );
621 // Check setting the property.
622 actor.SetProperty( CameraActor::Property::TARGET_POSITION, target1 );
623 DALI_TEST_EQUALS( actor.GetTargetPosition(), target1, FLOAT_EPSILON, TEST_LOCATION );
627 int UtcDaliCameraActorSetTargetPositionN(void)
629 TestApplication application;
630 tet_infoline( "Testing Dali::CameraActor Set Target Position (N)" );
634 bool asserted = true;
637 actor.SetTargetPosition( Vector3( 10.0f, 20.0f, 30.0f ) );
639 catch( Dali::DaliException& e )
641 DALI_TEST_PRINT_ASSERT( e );
642 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
645 DALI_TEST_CHECK( asserted );
650 int UtcDaliCameraActorGetTargetPositionP(void)
652 TestApplication application;
653 tet_infoline( "Testing Dali::CameraActor Get Target Position (P)" );
655 CameraActor actor = CameraActor::New();
656 Vector3 defaultValue( Vector3::ZERO );
657 DALI_TEST_EQUALS( actor.GetTargetPosition(), defaultValue, TEST_LOCATION );
659 // Check getting the property.
661 actor.GetProperty( CameraActor::Property::TARGET_POSITION ).Get( value );
662 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
666 int UtcDaliCameraActorGetTargetPositionN(void)
668 TestApplication application;
669 tet_infoline( "Testing Dali::CameraActor Get Target Position (N)" );
673 bool asserted = true;
676 actor.GetTargetPosition();
678 catch( Dali::DaliException& e )
680 DALI_TEST_PRINT_ASSERT( e );
681 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
684 DALI_TEST_CHECK( asserted );
689 int UtcDaliCameraActorSetInvertYAxisP(void)
691 TestApplication application;
692 tet_infoline( "Testing Dali::CameraActor Set InvertYAxis (P)" );
694 CameraActor actor = CameraActor::New();
696 // Set a value so we are not relying on a particular default for this test case.
697 actor.SetInvertYAxis( false );
698 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
700 actor.SetInvertYAxis( true );
701 DALI_TEST_EQUALS( actor.GetInvertYAxis(), true, TEST_LOCATION );
703 actor.SetProperty( CameraActor::Property::INVERT_Y_AXIS, false );
704 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
708 int UtcDaliCameraActorSetInvertYAxisN(void)
710 TestApplication application;
711 tet_infoline( "Testing Dali::CameraActor Set InvertYAxis (N)" );
715 bool asserted = true;
718 actor.SetInvertYAxis( false );
720 catch( Dali::DaliException& e )
722 DALI_TEST_PRINT_ASSERT( e );
723 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
726 DALI_TEST_CHECK( asserted );
730 int UtcDaliCameraActorGetInvertYAxisP(void)
732 TestApplication application;
733 tet_infoline( "Testing Dali::CameraActor Get InvertYAxis (P)" );
735 // Check the default value.
736 CameraActor actor = CameraActor::New();
737 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
739 // Check getting the property.
741 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
742 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
746 int UtcDaliCameraActorGetInvertYAxisN(void)
748 TestApplication application;
749 tet_infoline( "Testing Dali::CameraActor Get InvertYAxis (N)" );
753 bool asserted = true;
756 actor.GetInvertYAxis();
758 catch( Dali::DaliException& e )
760 DALI_TEST_PRINT_ASSERT( e );
761 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
764 DALI_TEST_CHECK( asserted );
768 int UtcDaliCameraActorSetPerspectiveProjectionP(void)
770 TestApplication application;
771 tet_infoline( "Testing Dali::CameraActor::SetPerspectiveProjection (P)" );
773 CameraActor actor = CameraActor::New();
774 actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
776 DALI_TEST_CHECK( actor );
779 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
780 DALI_TEST_EQUALS( 0.666666f, value, FLOAT_EPSILON, TEST_LOCATION );
781 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
782 DALI_TEST_EQUALS( 0.489957f, value, FLOAT_EPSILON, TEST_LOCATION );
783 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
784 DALI_TEST_EQUALS( 150.f, value, FLOAT_EPSILON, TEST_LOCATION );
785 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
786 DALI_TEST_EQUALS( 4245.f, value, FLOAT_EPSILON, TEST_LOCATION );
788 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
793 int UtcDaliCameraActorSetPerspectiveProjectionN(void)
795 TestApplication application;
796 tet_infoline( "Testing Dali::CameraActor::SetPerspectiveProjection (N)" );
798 Stage stage = Stage::GetCurrent();
799 Vector2 stageSize = stage.GetSize();
801 CameraActor actor = CameraActor::New();
803 // Check that setting perspective projection without a size (using zero size) uses the stages size.
804 actor.SetPerspectiveProjection( Size::ZERO );
806 float nearClippingPlane = std::max( stageSize.width, stageSize.height );
807 float farClippingPlane = nearClippingPlane + static_cast<float>( 0xFFFF >> 4 );
809 DALI_TEST_EQUALS( nearClippingPlane, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
810 DALI_TEST_EQUALS( farClippingPlane, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
811 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
816 int UtcDaliCameraActorSetOrthographicProjectionP1(void)
818 TestApplication application;
819 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,1)" );
821 CameraActor actor = CameraActor::New( Size( 1080.0f, 1920.0f ) );
822 DALI_TEST_CHECK( actor );
824 Stage::GetCurrent().Add( actor );
826 actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
827 application.SendNotification();
828 application.Render( 0 );
829 application.Render();
830 application.SendNotification();
832 float defaultAspectRatio;
833 float defaultFieldOfView;
834 float defaultNearPlaneDistance;
835 float defaultFarPlaneDistance;
836 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
837 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
838 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
839 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
840 Vector3 defaultPos = actor.GetCurrentPosition();
842 actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
844 application.SendNotification();
845 application.Render( 0 );
846 application.Render();
847 application.SendNotification();
850 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
851 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
852 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
853 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
854 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
855 DALI_TEST_EQUALS( defaultNearPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION );
856 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
857 DALI_TEST_EQUALS( defaultFarPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION );
859 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
860 DALI_TEST_EQUALS( -540.0f, value, FLOAT_EPSILON, TEST_LOCATION );
861 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
862 DALI_TEST_EQUALS( 540.0f, value, FLOAT_EPSILON, TEST_LOCATION );
863 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
864 DALI_TEST_EQUALS( 960.0f, value, FLOAT_EPSILON, TEST_LOCATION );
865 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
866 DALI_TEST_EQUALS( -960.0f, value, FLOAT_EPSILON, TEST_LOCATION );
868 Vector3 pos = actor.GetCurrentPosition();
869 DALI_TEST_EQUALS( defaultPos.z, pos.z, 0.001f, TEST_LOCATION );
871 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
875 int UtcDaliCameraActorSetOrthographicProjectionN(void)
877 TestApplication application;
878 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (N)" );
881 bool asserted = true;
884 actor.GetProjectionMode();
886 catch( Dali::DaliException& e )
888 DALI_TEST_PRINT_ASSERT( e );
889 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
892 DALI_TEST_CHECK( asserted );
896 int UtcDaliCameraActorSetOrthographicProjectionP2(void)
898 TestApplication application;
899 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,2)" );
901 CameraActor actor = CameraActor::New();
902 DALI_TEST_CHECK( actor );
904 float defaultAspectRatio;
905 float defaultFieldOfView;
906 float defaultNearPlaneDistance;
907 float defaultFarPlaneDistance;
908 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
909 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
910 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
911 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
913 // Check setting with specific near and far plane distances.
914 actor.SetOrthographicProjection( -100.0f, 200.0f, -300.0f, 500.0f, 400.0f, 4000.0f );
917 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
918 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
919 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
920 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
921 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
922 DALI_TEST_EQUALS( 400.0f, value, FLOAT_EPSILON, TEST_LOCATION );
923 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
924 DALI_TEST_EQUALS( 4000.0f, value, FLOAT_EPSILON, TEST_LOCATION );
926 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
927 DALI_TEST_EQUALS( -100.0f, value, FLOAT_EPSILON, TEST_LOCATION );
928 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
929 DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION );
930 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
931 DALI_TEST_EQUALS( -300.0f, value, FLOAT_EPSILON, TEST_LOCATION );
932 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
933 DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION );
935 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
940 int UtcDaliCameraActorSetOrthographicProjectionP3(void)
942 TestApplication application;
943 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,3)" );
945 CameraActor actor = CameraActor::New();
946 DALI_TEST_CHECK( actor );
948 float defaultAspectRatio;
949 float defaultFieldOfView;
950 float defaultNearPlaneDistance;
951 float defaultFarPlaneDistance;
952 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
953 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
954 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
955 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
957 actor.SetProjectionMode( Dali::Camera::ORTHOGRAPHIC_PROJECTION );
959 actor.SetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE, -100.0f );
960 actor.SetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE, 200.0f );
961 actor.SetProperty( CameraActor::Property::TOP_PLANE_DISTANCE, -300.0f );
962 actor.SetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE, 500.0f );
963 actor.SetNearClippingPlane( 400.0f );
964 actor.SetFarClippingPlane( 4000.0f );
967 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
968 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
969 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
970 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
971 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
972 DALI_TEST_EQUALS( 400.0f, value, FLOAT_EPSILON, TEST_LOCATION );
973 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
974 DALI_TEST_EQUALS( 4000.0f, value, FLOAT_EPSILON, TEST_LOCATION );
976 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
977 DALI_TEST_EQUALS( -100.0f, value, FLOAT_EPSILON, TEST_LOCATION );
978 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
979 DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION );
980 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
981 DALI_TEST_EQUALS( -300.0f, value, FLOAT_EPSILON, TEST_LOCATION );
982 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
983 DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION );
985 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
986 std::string stringValue;
987 actor.GetProperty( CameraActor::Property::PROJECTION_MODE ).Get( stringValue );
988 DALI_TEST_EQUALS( stringValue, "ORTHOGRAPHIC_PROJECTION", TEST_LOCATION );
992 int UtcDaliCameraActorSetProjectionModeP(void)
994 TestApplication application;
995 tet_infoline( "Testing Dali::CameraActor::SetProjectionModeP (P)" );
997 CameraActor actor = CameraActor::New();
999 // Check that changing the projection mode alone does not alter other presets.
1000 actor.SetNearClippingPlane( 200.0f );
1001 actor.SetFarClippingPlane( 400.0f );
1003 actor.SetProjectionMode( Dali::Camera::PERSPECTIVE_PROJECTION );
1005 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1006 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION );
1007 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION );
1009 actor.SetProjectionMode( Dali::Camera::ORTHOGRAPHIC_PROJECTION );
1011 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1012 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION );
1013 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION );
1015 // Check setting the property.
1016 Property::Value setValue = "PERSPECTIVE_PROJECTION";
1017 actor.SetProperty( CameraActor::Property::PROJECTION_MODE, setValue );
1018 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1022 int UtcDaliCameraActorSetProjectionModeN(void)
1024 TestApplication application;
1025 tet_infoline( "Testing Dali::CameraActor::SetProjectionModeP (N)" );
1029 bool asserted = true;
1032 actor.SetProjectionMode( Dali::Camera::PERSPECTIVE_PROJECTION );
1034 catch( Dali::DaliException& e )
1036 DALI_TEST_PRINT_ASSERT( e );
1037 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
1040 DALI_TEST_CHECK( asserted );
1044 int UtcDaliCameraActorGetProjectionModeP(void)
1046 TestApplication application;
1047 tet_infoline( "Testing Dali::CameraActor::GetPerspectiveProjection (P)" );
1049 CameraActor actor = CameraActor::New();
1051 actor.SetOrthographicProjection( Size::ONE );
1052 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1054 actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
1055 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1057 // Check getting the property.
1058 std::string stringValue;
1059 actor.GetProperty( CameraActor::Property::PROJECTION_MODE ).Get( stringValue );
1060 DALI_TEST_EQUALS( stringValue, "PERSPECTIVE_PROJECTION", TEST_LOCATION );
1064 int UtcDaliCameraActorGetProjectionModeN(void)
1066 TestApplication application;
1067 tet_infoline( "Testing Dali::CameraActor::GetProjectionMode (N)" );
1071 bool asserted = true;
1074 actor.GetProjectionMode();
1076 catch( Dali::DaliException& e )
1078 DALI_TEST_PRINT_ASSERT( e );
1079 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
1082 DALI_TEST_CHECK( asserted );
1086 int UtcDaliCameraActorSetCameraOffStage(void)
1088 TestApplication application;
1089 tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
1091 CameraActor actor = CameraActor::New();
1093 actor.SetType( Camera::FREE_LOOK );
1094 actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
1095 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1096 actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
1097 actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
1098 actor.SetProjectionMode( Camera::PERSPECTIVE_PROJECTION );
1100 actor.SetInvertYAxis( false );
1102 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );//change to machine epsilon
1103 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1104 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1105 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1106 DALI_TEST_EQUALS( Camera::PERSPECTIVE_PROJECTION, actor.GetProjectionMode(), TEST_LOCATION );
1107 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1111 actor.GetProperty( CameraActor::Property::ASPECT_RATIO).Get( value );
1112 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
1113 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW).Get( value );
1114 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
1115 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE).Get( value );
1116 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1117 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE).Get( value );
1118 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1119 actor.GetProperty( CameraActor::Property::PROJECTION_MODE).Get( sValue );
1120 DALI_TEST_EQUALS( "PERSPECTIVE_PROJECTION", sValue, TEST_LOCATION );
1122 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS).Get( bValue );
1123 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1127 int UtcDaliCameraActorSetCameraOnStage(void)
1129 TestApplication application;
1130 tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
1132 CameraActor actor = CameraActor::New();
1133 Stage::GetCurrent().Add( actor );
1134 application.Render( 0 );
1135 application.SendNotification();
1137 actor.SetType( Camera::LOOK_AT_TARGET );
1138 actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
1139 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1140 actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
1141 actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
1142 actor.SetInvertYAxis( false );
1144 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1146 // Will need 2 frames to ensure both buffers are set to same values:
1147 application.Render();
1148 application.SendNotification();
1149 application.Render();
1150 application.SendNotification();
1152 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
1153 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1154 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1155 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1156 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1159 actor.GetProperty( CameraActor::Property::TYPE ).Get( sValue );
1160 DALI_TEST_EQUALS( sValue, "LOOK_AT_TARGET", TEST_LOCATION );
1163 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
1164 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
1165 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
1166 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
1167 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
1168 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1169 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value);
1170 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1173 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
1174 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1178 int UtcDaliCameraActorGetCamera(void)
1180 TestApplication application;
1181 tet_infoline( "Testing Dali::CameraActor::GetCamera()" );
1183 CameraActor actor = CameraActor::New();
1185 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1187 DALI_TEST_EQUALS( actor.GetAspectRatio(), TEST_ASPECT_RATIO, FLOAT_EPSILON, TEST_LOCATION );
1189 actor.SetProperty( CameraActor::Property::TYPE, "FREE_LOOK" );
1190 actor.SetProperty( CameraActor::Property::ASPECT_RATIO, TEST_ASPECT_RATIO );
1191 actor.SetProperty( CameraActor::Property::FIELD_OF_VIEW, TEST_FIELD_OF_VIEW );
1192 actor.SetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE, TEST_NEAR_PLANE_DISTANCE );
1193 actor.SetProperty( CameraActor::Property::FAR_PLANE_DISTANCE, TEST_FAR_PLANE_DISTANCE );
1195 DALI_TEST_EQUALS( Camera::FREE_LOOK, actor.GetType(), TEST_LOCATION );
1196 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
1197 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1198 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1199 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1203 int UtcDaliCameraActorDefaultProperties(void)
1205 TestApplication application;
1206 tet_infoline( "Testing Dali::CameraActor DefaultProperties" );
1208 CameraActor actor = CameraActor::New();
1209 Stage stage = Stage::GetCurrent();
1211 stage.GetRenderTaskList().GetTask(0).SetCameraActor( actor );
1213 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1214 Stage::GetCurrent().Add( actor );
1215 application.Render( 0 );
1216 application.SendNotification();
1218 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
1219 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1221 std::vector<Property::Index> indices ;
1222 indices.push_back( CameraActor::Property::TYPE );
1223 indices.push_back( CameraActor::Property::PROJECTION_MODE );
1224 indices.push_back( CameraActor::Property::FIELD_OF_VIEW );
1225 indices.push_back( CameraActor::Property::ASPECT_RATIO );
1226 indices.push_back( CameraActor::Property::NEAR_PLANE_DISTANCE );
1227 indices.push_back( CameraActor::Property::FAR_PLANE_DISTANCE );
1228 indices.push_back( CameraActor::Property::LEFT_PLANE_DISTANCE );
1229 indices.push_back( CameraActor::Property::RIGHT_PLANE_DISTANCE );
1230 indices.push_back( CameraActor::Property::TOP_PLANE_DISTANCE );
1231 indices.push_back( CameraActor::Property::BOTTOM_PLANE_DISTANCE );
1232 indices.push_back( CameraActor::Property::TARGET_POSITION );
1233 indices.push_back( CameraActor::Property::PROJECTION_MATRIX );
1234 indices.push_back( CameraActor::Property::VIEW_MATRIX );
1235 indices.push_back( CameraActor::Property::INVERT_Y_AXIS );
1237 DALI_TEST_CHECK( actor.GetPropertyCount() == ( Actor::New().GetPropertyCount() + indices.size() ) );
1239 for( std::vector<Property::Index>::iterator iter = indices.begin(); iter != indices.end(); ++iter )
1241 DALI_TEST_EQUALS( *iter, actor.GetPropertyIndex( actor.GetPropertyName( *iter ) ), TEST_LOCATION);
1242 DALI_TEST_CHECK( !actor.IsPropertyAnimatable( *iter ) );
1244 if ( ( *iter == CameraActor::Property::PROJECTION_MATRIX ) ||
1245 ( *iter == CameraActor::Property::VIEW_MATRIX ) )
1247 DALI_TEST_CHECK( !actor.IsPropertyWritable( *iter ) );
1251 DALI_TEST_CHECK( actor.IsPropertyWritable( *iter ) );
1254 DALI_TEST_CHECK( actor.GetPropertyType( *iter ) == actor.GetPropertyType( *iter ) ); // just checking call succeeds
1257 // Set/Get one of them.
1258 const float newAspect = TEST_ASPECT_RATIO * 2.0f;
1260 actor.SetProperty( CameraActor::Property::ASPECT_RATIO, Property::Value( newAspect ) );
1261 application.Render();
1262 application.SendNotification();
1263 application.Render();
1264 application.SendNotification();
1266 DALI_TEST_EQUALS( actor.GetAspectRatio(), newAspect, TEST_LOCATION );
1270 int UtcDaliCameraActorModelView(void)
1272 TestApplication application;
1273 tet_infoline( "Testing Dali::CameraActor Test view application" );
1275 BufferImage image = CreateBufferImage();
1277 Actor actor = CreateRenderableActor(image);
1278 actor.SetSize( 100.0f, 100.0f );
1279 actor.SetPosition( 20.0f, 30.0f, 40.0f );
1280 actor.SetParentOrigin( ParentOrigin::CENTER );
1281 Stage::GetCurrent().Add( actor );
1283 application.SendNotification();
1284 application.Render( 0 );
1285 application.Render();
1286 application.SendNotification();
1288 Matrix resultMatrix( true );
1289 resultMatrix.SetTransformComponents( Vector3::ONE, Quaternion::IDENTITY, actor.GetCurrentPosition() );
1291 RenderTask task = Stage::GetCurrent().GetRenderTaskList().GetTask( 0 );
1292 CameraActor cameraActor = task.GetCameraActor();
1294 Matrix viewMatrix( false );
1295 cameraActor.GetProperty( CameraActor::Property::VIEW_MATRIX ).Get( viewMatrix );
1296 Matrix::Multiply( resultMatrix, resultMatrix, viewMatrix );
1298 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( "uModelView", resultMatrix ) );
1302 int UtcDaliCameraActorReadProjectionMatrix(void)
1304 TestApplication application;
1305 tet_infoline( "Testing Dali::CameraActor::ReadProjectionMatrix()" );
1307 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1308 application.SendNotification();
1309 application.Render( 0 );
1310 application.Render();
1311 application.SendNotification();
1312 Image image = CreateBufferImage();
1313 Actor actor = CreateRenderableActor( image, RENDER_SHADOW_VERTEX_SOURCE, RENDER_SHADOW_FRAGMENT_SOURCE );
1314 actor.SetSize( 100.0f, 100.0f );
1315 Stage::GetCurrent().Add( actor );
1317 Matrix projectionMatrix;
1320 camera.GetProperty( CameraActor::CameraActor::Property::PROJECTION_MATRIX ).Get( projectionMatrix );
1321 camera.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( viewMatrix );
1323 actor.RegisterProperty( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
1324 actor.RegisterProperty( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
1326 Property::Index projectionMatrixPropertyIndex = actor.GetPropertyIndex( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME );
1327 Property::Index viewMatrixPropertyIndex = actor.GetPropertyIndex( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME );
1329 Constraint projectionMatrixConstraint = Constraint::New<Dali::Matrix>( actor, projectionMatrixPropertyIndex, EqualToConstraint() );
1330 projectionMatrixConstraint.AddSource( Source( camera, CameraActor::Property::PROJECTION_MATRIX ) );
1331 Constraint viewMatrixConstraint = Constraint::New<Dali::Matrix>( actor, viewMatrixPropertyIndex, EqualToConstraint() );
1332 viewMatrixConstraint.AddSource( Source( camera, CameraActor::Property::VIEW_MATRIX ) );
1334 projectionMatrixConstraint.Apply();
1335 viewMatrixConstraint.Apply();
1337 application.SendNotification();
1338 application.Render();
1340 // Test effects of Constraint.
1341 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME.c_str(), projectionMatrix) );
1343 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME.c_str(), viewMatrix ) );
1347 int UtcDaliCameraActorAnimatedProperties(void)
1349 TestApplication application;
1350 tet_infoline( "Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()" );
1352 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1353 Actor actor = Actor::New();
1354 actor.SetSize( 100.0f, 100.0f );
1355 Stage::GetCurrent().Add( actor );
1357 Constraint constraint = Constraint::New<Dali::Vector3>( actor, Actor::Property::POSITION, EqualToConstraint() );
1358 constraint.AddSource( Source( camera, Actor::Property::POSITION ) );
1361 camera.SetPosition( 100.0f, 200.0f, 300.0f );
1362 application.SendNotification();
1363 application.Render();
1365 DALI_TEST_EQUALS( actor.GetCurrentPosition(), Vector3( 100.0f, 200.0f, 300.0f ), TEST_LOCATION);
1369 int UtcDaliCameraActorPropertyIndices(void)
1371 TestApplication application;
1372 CameraActor camera = Stage::GetCurrent().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1374 Actor basicActor = Actor::New();
1375 Property::IndexContainer indices;
1376 camera.GetPropertyIndices( indices );
1377 DALI_TEST_CHECK( indices.Size() > basicActor.GetPropertyCount() );
1378 DALI_TEST_EQUALS( indices.Size(), camera.GetPropertyCount(), TEST_LOCATION );
1382 int UtcDaliCameraActorCheckLookAtAndFreeLookViews01(void)
1384 TestApplication application;
1385 Stage stage = Stage::GetCurrent();
1386 Vector2 stageSize = stage.GetSize();
1388 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1389 freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1390 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1392 Vector3 targetPosition( 30.0f, 240.0f, -256.0f );
1393 Actor target = Actor::New();
1394 target.SetParentOrigin( ParentOrigin::CENTER );
1395 target.SetPosition( targetPosition );
1397 Constraint cameraOrientationConstraint = Constraint::New<Quaternion> ( freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt );
1398 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_POSITION ) );
1399 cameraOrientationConstraint.AddSource( Source( freeLookCameraActor, Actor::Property::WORLD_POSITION ) );
1400 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_ORIENTATION ) );
1401 cameraOrientationConstraint.Apply();
1403 CameraActor lookAtCameraActor = CameraActor::New( stageSize );
1404 lookAtCameraActor.SetType( Camera::LOOK_AT_TARGET );
1405 lookAtCameraActor.SetTargetPosition( targetPosition );
1406 lookAtCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1408 stage.Add( target );
1409 stage.Add( freeLookCameraActor );
1410 stage.Add( lookAtCameraActor );
1412 // Create an arbitrary vector
1413 for( float x=-1.0f; x<=1.0f; x+=0.1f )
1415 for( float y=-1.0f; y<1.0f; y+=0.1f )
1417 for( float z=-1.0f; z<1.0f; z+=0.1f )
1419 Vector3 position( x, y, z );
1420 position.Normalize();
1423 freeLookCameraActor.SetPosition( position );
1424 lookAtCameraActor.SetPosition( position );
1426 application.SendNotification();
1427 application.Render();
1428 application.SendNotification();
1429 application.Render();
1430 Matrix freeLookViewMatrix;
1431 Matrix lookAtViewMatrix;
1432 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1433 lookAtCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( lookAtViewMatrix );
1435 DALI_TEST_EQUALS( freeLookViewMatrix, lookAtViewMatrix, 0.01, TEST_LOCATION );
1442 int UtcDaliCameraActorCheckLookAtAndFreeLookViews02(void)
1444 TestApplication application;
1445 Stage stage = Stage::GetCurrent();
1446 Vector2 stageSize = stage.GetSize();
1448 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1449 freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1450 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1452 Vector3 targetPosition( 30.0f, 240.0f, -256.0f );
1453 Actor target = Actor::New();
1454 target.SetParentOrigin( ParentOrigin::CENTER );
1455 target.SetPosition( targetPosition );
1457 Constraint cameraOrientationConstraint = Constraint::New<Quaternion> ( freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt );
1458 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_POSITION ) );
1459 cameraOrientationConstraint.AddSource( Source( freeLookCameraActor, Actor::Property::WORLD_POSITION ) );
1460 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_ORIENTATION ) );
1461 cameraOrientationConstraint.Apply();
1463 CameraActor lookAtCameraActor = CameraActor::New( stageSize );
1464 lookAtCameraActor.SetType( Camera::LOOK_AT_TARGET );
1465 lookAtCameraActor.SetTargetPosition( targetPosition );
1466 lookAtCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1468 stage.Add( target );
1469 stage.Add( freeLookCameraActor );
1470 stage.Add( lookAtCameraActor );
1471 stage.GetRenderTaskList().GetTask(0).SetCameraActor( freeLookCameraActor );
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 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1494 Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
1496 Matrix freeLookTest( false );
1497 Matrix::Multiply( freeLookTest, freeLookViewMatrix, freeLookWorld );
1498 DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION );
1506 int UtcDaliCameraActorCheckLookAtAndFreeLookViews03(void)
1508 TestApplication application;
1509 Stage stage = Stage::GetCurrent();
1510 Vector2 stageSize = stage.GetSize();
1512 Vector3 targetPosition( Vector3::ZERO );
1513 Vector3 cameraOffset( 0.0f, 0.0f, 100.0f );
1515 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1516 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1517 freeLookCameraActor.SetParentOrigin( ParentOrigin::CENTER );
1519 Quaternion cameraOrientation( Radian( Degree( 180.0f ) ), Vector3::YAXIS );
1520 freeLookCameraActor.SetPosition( cameraOffset );
1521 freeLookCameraActor.SetOrientation( cameraOrientation );
1523 Actor cameraAnchor = Actor::New();
1524 cameraAnchor.Add( freeLookCameraActor );
1525 stage.Add( cameraAnchor );
1526 stage.GetRenderTaskList().GetTask(0).SetCameraActor( freeLookCameraActor );
1528 for( float angle = 1.0f; angle <= 180.0f; angle += 1.0f )
1530 Quaternion rotation( Radian( Degree( angle ) ), Vector3::YAXIS );
1532 freeLookCameraActor.SetPosition( rotation.Rotate( cameraOffset ) );
1533 cameraAnchor.SetOrientation( rotation );
1535 application.SendNotification();
1536 application.Render();
1537 application.SendNotification();
1538 application.Render();
1540 Matrix freeLookViewMatrix;
1541 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1543 Matrix freeLookWorld = freeLookCameraActor.GetCurrentWorldMatrix();
1545 Matrix freeLookTest( false );
1546 Matrix::Multiply( freeLookTest, freeLookViewMatrix, freeLookWorld );
1547 DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION );