2 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include <dali/public-api/dali-core.h>
23 #include <dali/devel-api/actors/actor-devel.h>
24 #include <dali/devel-api/actors/camera-actor-devel.h>
26 #include "dali-test-suite-utils/dali-test-suite-utils.h"
30 void camera_actor_test_startup(void)
32 test_return_value = TET_UNDEF;
35 void camera_actor_test_cleanup(void)
37 test_return_value = TET_PASS;
43 const float FLOAT_EPSILON = 0.001f;
44 const float TEST_ASPECT_RATIO = 0.123f;
45 const float TEST_FIELD_OF_VIEW = Radian(Degree(40.0f));
46 const float TEST_NEAR_PLANE_DISTANCE = 0.23f;
47 const float TEST_FAR_PLANE_DISTANCE = 0.973f;
49 const std::string SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME( "uLightCameraProjectionMatrix" );
50 const std::string SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME( "uLightCameraViewMatrix" );
51 const char* const RENDER_SHADOW_VERTEX_SOURCE =
52 " uniform mediump mat4 uLightCameraProjectionMatrix;\n"
53 " uniform mediump mat4 uLightCameraViewMatrix;\n"
57 " gl_Position = uProjection * uModelView * vec4(aPosition,1.0);\n"
58 " vec4 textureCoords = uLightCameraProjectionMatrix * uLightCameraViewMatrix * uModelMatrix * vec4(aPosition,1.0);\n"
59 " vTexCoord = 0.5 + 0.5 * (textureCoords.xy/textureCoords.w);\n"
62 const char* const RENDER_SHADOW_FRAGMENT_SOURCE =
63 "uniform lowp vec4 uShadowColor;\n"
66 " lowp float alpha;\n"
67 " alpha = texture2D(sTexture, vec2(vTexCoord.x, vTexCoord.y)).a;\n"
68 " gl_FragColor = vec4(uShadowColor.rgb, uShadowColor.a * alpha);\n"
71 struct PropertyDetails
73 std::string name; ///< The name of the property.
74 Property::Type type; ///< The property type.
75 bool writable; ///< Whether the property is writable
76 bool animatable; ///< Whether the property is animatable.
77 bool constraintInput; ///< Whether the property can be used as an input to a constraint.
78 Property::Index enumIndex; ///< Used to check the index is correct within a debug build.
81 } // Anonymous namespace
84 int UtcDaliCameraActorConstructorP(void)
86 TestApplication application;
87 tet_infoline( "Testing Dali::CameraActor::CameraActor()" );
91 DALI_TEST_CHECK( !actor );
95 // Note: No negative test for UtcDaliCameraActorConstructor.
97 int UtcDaliCameraActorDestructorP(void)
99 TestApplication application;
100 tet_infoline( "Testing Dali::~CameraActor (P)" );
101 CameraActor* actor = new CameraActor();
105 DALI_TEST_CHECK( true );
109 // Note: No negative test for UtcDaliCameraActorDestructor.
111 int UtcDaliCameraActorCopyConstructorP(void)
113 TestApplication application;
114 tet_infoline( "Testing Dali::CameraActor Copy Constructor (P)" );
115 CameraActor actor = CameraActor::New();
117 CameraActor copyActor( actor );
119 DALI_TEST_CHECK( copyActor );
120 DALI_TEST_CHECK( copyActor == actor );
125 int UtcDaliCameraActorCopyConstructorN(void)
127 TestApplication application;
128 tet_infoline( "Testing Dali::CameraActor Copy Constructor (N)" );
131 CameraActor copyActor( actor );
133 DALI_TEST_CHECK( !copyActor );
138 int UtcDaliCameraActorAssignmentOperatorP(void)
140 TestApplication application;
141 tet_infoline( "Testing Dali::CameraActor Assignment Operator (P)" );
142 const CameraActor actor = CameraActor::New();
144 CameraActor copyActor = actor;
146 DALI_TEST_CHECK( copyActor );
147 DALI_TEST_CHECK( copyActor == actor );
152 int UtcDaliCameraActorAssignmentOperatorN(void)
154 TestApplication application;
155 tet_infoline( "Testing Dali::CameraActor = (N)" );
158 CameraActor copyActor = actor;
160 DALI_TEST_CHECK( !copyActor );
165 int UtcDaliCameraActorNewP(void)
167 TestApplication application;
168 tet_infoline( "Testing Dali::CameraActor::New (P)" );
170 CameraActor actor = CameraActor::New();
172 DALI_TEST_CHECK( actor );
176 DALI_TEST_CHECK( !actor );
180 int UtcDaliCameraActorNewDefaultPerspectiveProjection(void)
182 TestApplication application;
183 tet_infoline( "Test the perspective projection of a camera actor is set appropriately when not passing in a size" );
185 CameraActor actor = CameraActor::New();
186 DALI_TEST_CHECK( actor );
188 // All the properties should still be the default values
189 // Defaults taken from scene-graph-camera.cpp
190 DALI_TEST_EQUALS( 4.0f/3.0f, actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
191 DALI_TEST_EQUALS( 45.0f*(Math::PI/180.0f), actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
192 DALI_TEST_EQUALS( 800.0f, actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
193 DALI_TEST_EQUALS( 3.0f * 800.0f, actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
194 DALI_TEST_EQUALS( 0.0f, actor.GetProperty( Actor::Property::POSITION_Z ).Get< float >(), TEST_LOCATION );
195 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
197 // Add it to the stage, then the values should be updated to reflect a 480.0f by 800.0f scene (default stage size)
198 application.GetScene().Add( actor );
200 DALI_TEST_EQUALS( 0.6f, actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
201 DALI_TEST_EQUALS( 0.489957f, actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
202 DALI_TEST_EQUALS( 800.0f, actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
203 DALI_TEST_EQUALS( 4895.0f, actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
204 DALI_TEST_EQUALS( 1600.0f, actor.GetProperty( Actor::Property::POSITION_Z ).Get< float >(), TEST_LOCATION );
205 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
207 // Ensure the values stay the same after update/render
208 application.SendNotification();
209 application.Render();
211 DALI_TEST_EQUALS( 0.6f, actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
212 DALI_TEST_EQUALS( 0.489957f, actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
213 DALI_TEST_EQUALS( 800.0f, actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
214 DALI_TEST_EQUALS( 4895.0f, actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
215 DALI_TEST_EQUALS( 1600.0f, actor.GetProperty( Actor::Property::POSITION_Z ).Get< float >(), TEST_LOCATION );
216 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
221 // Note: No negative test for UtcDaliCameraActorNew.
223 int UtcDaliCameraActorDownCastP(void)
225 TestApplication application;
226 tet_infoline( "Testing Dali::CameraActor::DownCast (P)" );
228 CameraActor camera = CameraActor::New();
229 Actor anActor = Actor::New();
230 anActor.Add( camera );
232 Actor child = anActor.GetChildAt( 0 );
233 CameraActor cameraActor = CameraActor::DownCast( child );
234 DALI_TEST_CHECK( cameraActor );
237 DALI_TEST_CHECK( !cameraActor );
239 cameraActor = DownCast< CameraActor >( child );
240 DALI_TEST_CHECK( cameraActor );
244 int UtcDaliCameraActorDownCastN(void)
246 TestApplication application;
247 tet_infoline( "Testing Dali::CameraActor::DownCast (N)" );
249 Actor actor1 = Actor::New();
250 Actor anActor = Actor::New();
251 anActor.Add( actor1 );
253 Actor child = anActor.GetChildAt( 0 );
254 CameraActor cameraActor = CameraActor::DownCast( child );
255 DALI_TEST_CHECK( !cameraActor );
257 Actor unInitialzedActor;
258 cameraActor = CameraActor::DownCast( unInitialzedActor );
259 DALI_TEST_CHECK( !cameraActor );
261 cameraActor = DownCast< CameraActor >( unInitialzedActor );
262 DALI_TEST_CHECK( !cameraActor );
266 // Note: SetType and GetType are tested within the same test cases.
268 int UtcDaliCameraActorSetGetTypeP(void)
270 TestApplication application;
271 tet_infoline( "Testing Dali::CameraActor GetType (P)" );
273 CameraActor actor = CameraActor::New();
274 DALI_TEST_EQUALS( actor.GetType(), Dali::Camera::FREE_LOOK, TEST_LOCATION );
276 actor.SetType( Dali::Camera::LOOK_AT_TARGET );
277 DALI_TEST_EQUALS( actor.GetType(), Dali::Camera::LOOK_AT_TARGET, TEST_LOCATION );
279 DALI_TEST_EQUALS( "LOOK_AT_TARGET", actor.GetProperty< std::string >( CameraActor::Property::TYPE ), TEST_LOCATION );
280 DALI_TEST_EQUALS( "LOOK_AT_TARGET", actor.GetCurrentProperty< std::string >( CameraActor::Property::TYPE ), TEST_LOCATION );
284 int UtcDaliCameraActorSetGetTypeN(void)
286 TestApplication application;
287 tet_infoline( "Testing Dali::CameraActor GetType (N)" );
291 Dali::Camera::Type cameraType = Dali::Camera::FREE_LOOK;
294 cameraType = actor.GetType();
296 catch ( Dali::DaliException& e )
298 DALI_TEST_PRINT_ASSERT( e );
299 DALI_TEST_ASSERT( e, "camera", TEST_LOCATION );
302 const CameraActor aConstActor;
306 cameraType = aConstActor.GetType();
308 catch ( Dali::DaliException& e )
310 DALI_TEST_PRINT_ASSERT( e );
311 DALI_TEST_ASSERT( e, "camera", TEST_LOCATION );
314 DALI_TEST_EQUALS( cameraType, Dali::Camera::FREE_LOOK, TEST_LOCATION );
318 int UtcDaliCameraActorSetFieldOfViewP(void)
320 TestApplication application;
321 tet_infoline( "Testing Dali::CameraActor Set Field of view (P)" );
323 CameraActor defaultCamera = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
324 const float defaultFieldOfView = defaultCamera.GetFieldOfView();
326 CameraActor actor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
327 DALI_TEST_EQUALS( actor.GetFieldOfView(), defaultFieldOfView, TEST_LOCATION );
329 float fieldOfView = Math::PI / 3.0f;
330 actor.SetFieldOfView( fieldOfView );
331 DALI_TEST_EQUALS( actor.GetFieldOfView(), fieldOfView, TEST_LOCATION );
334 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
335 DALI_TEST_EQUALS( fieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
339 int UtcDaliCameraActorSetFieldOfViewN(void)
341 TestApplication application;
342 tet_infoline( "Testing Dali::CameraActor Set Field of view (N)" );
344 CameraActor defaultCamera = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
345 const float defaultFieldOfView = defaultCamera.GetFieldOfView();
347 CameraActor actor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
348 DALI_TEST_EQUALS( actor.GetFieldOfView(), defaultFieldOfView, TEST_LOCATION );
350 float fieldOfView = Math::PI / 3.0f;
351 actor.SetFieldOfView( fieldOfView );
352 DALI_TEST_EQUALS( actor.GetFieldOfView(), fieldOfView, TEST_LOCATION );
355 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
356 DALI_TEST_EQUALS( fieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
360 int UtcDaliCameraActorGetFieldOfViewP(void)
362 TestApplication application;
363 tet_infoline( "Testing Dali::CameraActor Get Field of view (P)" );
364 const Vector2 size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT );
366 CameraActor defaultCamera = CameraActor::New( size );
368 const float cameraZ = 2.0f * std::max( size.width, size.height );
369 const float expectedFieldOfView = 2.0f * std::atan( size.height * 0.5f / cameraZ );
371 CameraActor actor = CameraActor::New( size );
372 DALI_TEST_EQUALS( actor.GetFieldOfView(), expectedFieldOfView, TEST_LOCATION );
375 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
376 DALI_TEST_EQUALS( expectedFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
380 int UtcDaliCameraActorGetFieldOfViewN(void)
382 TestApplication application;
383 tet_infoline( "Testing Dali::CameraActor Get Field of view (N)" );
385 CameraActor defaultCamera = CameraActor::New();
387 bool asserted = true;
390 defaultCamera.GetFieldOfView();
392 catch( Dali::DaliException& e )
394 DALI_TEST_PRINT_ASSERT( e );
395 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
398 DALI_TEST_CHECK( asserted );
403 int UtcDaliCameraActorSetAspectRatioP(void)
405 TestApplication application;
406 tet_infoline( "Testing Dali::CameraActor Set Aspect Ratio (P)" );
408 CameraActor actor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
409 DALI_TEST_EQUALS( actor.GetAspectRatio(), static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT ), TEST_LOCATION );
411 // Set an initial value to confirm a further set changes it.
412 float aspect = 4.0f / 3.0f;
413 actor.SetAspectRatio( aspect );
414 DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
416 aspect = 16.0f / 9.0f;
417 actor.SetAspectRatio( aspect );
418 DALI_TEST_EQUALS( actor.GetAspectRatio(), aspect, TEST_LOCATION );
423 int UtcDaliCameraActorSetAspectRatioN(void)
425 TestApplication application;
426 tet_infoline( "Testing Dali::CameraActor Set Aspect Ratio (N)" );
430 bool asserted = true;
433 actor.SetAspectRatio( 16.0f / 9.0f );
435 catch( Dali::DaliException& e )
437 DALI_TEST_PRINT_ASSERT( e );
438 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
441 DALI_TEST_CHECK( asserted );
446 int UtcDaliCameraActorGetAspectRatioP(void)
448 TestApplication application;
449 tet_infoline("Testing Dali::CameraActor Get Aspect Ratio");
451 CameraActor actor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
452 float defaultAspect = static_cast<float>( TestApplication::DEFAULT_SURFACE_WIDTH ) / static_cast<float>( TestApplication::DEFAULT_SURFACE_HEIGHT );
454 DALI_TEST_EQUALS( actor.GetAspectRatio(), defaultAspect, TEST_LOCATION );
457 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
458 DALI_TEST_EQUALS( defaultAspect, value, FLOAT_EPSILON, TEST_LOCATION );
463 int UtcDaliCameraActorGetAspectRatioN(void)
465 TestApplication application;
466 tet_infoline( "Testing Dali::CameraActor Get Aspect Ratio (N)" );
470 bool asserted = true;
473 actor.GetAspectRatio();
475 catch( Dali::DaliException& e )
477 DALI_TEST_PRINT_ASSERT( e );
478 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
482 DALI_TEST_CHECK( asserted );
487 int UtcDaliCameraActorSetNearClippingPlaneP(void)
489 TestApplication application;
490 tet_infoline( "Testing Dali::CameraActor Set Near clipping plane (P)" );
492 CameraActor actor = CameraActor::New();
494 // Set a value so we are not relying on a particular default for this test case.
495 actor.SetNearClippingPlane( 200.0f );
496 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, TEST_LOCATION );
498 actor.SetNearClippingPlane( 400.0f );
499 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 400.0f, TEST_LOCATION );
501 // Check setting the property.
502 actor.SetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE, Property::Value( 300.0f ) );
503 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 300.0f, FLOAT_EPSILON, TEST_LOCATION );
507 int UtcDaliCameraActorSetNearClippingPlaneN(void)
509 TestApplication application;
510 tet_infoline( "Testing Dali::CameraActor Set Near clipping plane (N)" );
514 bool asserted = true;
517 actor.SetNearClippingPlane( 200.0f );
519 catch( Dali::DaliException& e )
521 DALI_TEST_PRINT_ASSERT( e );
522 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
526 DALI_TEST_CHECK( asserted );
531 int UtcDaliCameraActorGetNearClippingPlaneP(void)
533 TestApplication application;
534 tet_infoline( "Testing Dali::CameraActor Get Near clipping plane (P)" );
536 // Check the default value.
537 CameraActor actor = CameraActor::New();
538 float defaultValue = 800.0f;
539 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), defaultValue, TEST_LOCATION );
541 // Check getting the property.
543 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
544 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
548 int UtcDaliCameraActorGetNearClippingPlaneN(void)
550 TestApplication application;
551 tet_infoline( "Testing Dali::CameraActor Get Near clipping plane (N)" );
554 bool asserted = true;
557 actor.GetNearClippingPlane();
559 catch( Dali::DaliException& e )
561 DALI_TEST_PRINT_ASSERT( e );
562 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
566 DALI_TEST_CHECK( asserted );
571 int UtcDaliCameraActorSetFarClippingPlaneP(void)
573 TestApplication application;
574 tet_infoline( "Testing Dali::CameraActor Set Far clipping plane (P)" );
576 CameraActor actor = CameraActor::New();
578 // Set a value so we are not relying on a particular default for this test case.
579 actor.SetFarClippingPlane( 2000.0f );
580 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 2000.0f, TEST_LOCATION );
582 actor.SetFarClippingPlane( 4000.0f );
583 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 4000.0f, TEST_LOCATION );
585 // Check setting the property.
586 actor.SetProperty( CameraActor::Property::FAR_PLANE_DISTANCE, 2000.0f );
587 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 2000.0f, FLOAT_EPSILON, TEST_LOCATION );
591 int UtcDaliCameraActorSetFarClippingPlaneN(void)
593 TestApplication application;
594 tet_infoline( "Testing Dali::CameraActor Set Far clipping plane (N)" );
598 bool asserted = true;
601 actor.SetFarClippingPlane( 2000.0f );
603 catch( Dali::DaliException& e )
605 DALI_TEST_PRINT_ASSERT( e );
606 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
610 DALI_TEST_CHECK( asserted );
615 int UtcDaliCameraActorGetFarClippingPlaneP(void)
617 TestApplication application;
618 tet_infoline( "Testing Dali::CameraActor Get Far clipping plane (P)" );
620 CameraActor actor = CameraActor::New( Size( TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT ) );
621 float defaultValue = 800.0f + ( 0xFFFF >> 4 );
622 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), defaultValue, TEST_LOCATION );
624 // Check getting the property.
626 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
627 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
631 int UtcDaliCameraActorGetFarClippingPlaneN(void)
633 TestApplication application;
634 tet_infoline( "Testing Dali::CameraActor Get Far clipping plane (N)" );
638 bool asserted = true;
641 actor.GetFarClippingPlane();
643 catch( Dali::DaliException& e )
645 DALI_TEST_PRINT_ASSERT( e );
646 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
650 DALI_TEST_CHECK( asserted );
655 int UtcDaliCameraActorSetTargetPositionP(void)
657 TestApplication application;
658 tet_infoline( "Testing Dali::CameraActor Set Target Position (P)" );
660 CameraActor actor = CameraActor::New();
662 Vector3 target1( 10.0f, 20.0f, 30.0f );
663 Vector3 target2( 15.0f, 25.0f, 35.0f );
665 // Set a value so we are not relying on a particular default for this test case.
666 actor.SetTargetPosition( target1 );
667 DALI_TEST_EQUALS( actor.GetTargetPosition(), target1, TEST_LOCATION );
669 actor.SetTargetPosition( target2 );
670 DALI_TEST_EQUALS( actor.GetTargetPosition(), target2, TEST_LOCATION );
672 // Check setting the property.
673 actor.SetProperty( CameraActor::Property::TARGET_POSITION, target1 );
674 DALI_TEST_EQUALS( actor.GetTargetPosition(), target1, FLOAT_EPSILON, TEST_LOCATION );
678 int UtcDaliCameraActorSetTargetPositionN(void)
680 TestApplication application;
681 tet_infoline( "Testing Dali::CameraActor Set Target Position (N)" );
685 bool asserted = true;
688 actor.SetTargetPosition( Vector3( 10.0f, 20.0f, 30.0f ) );
690 catch( Dali::DaliException& e )
692 DALI_TEST_PRINT_ASSERT( e );
693 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
696 DALI_TEST_CHECK( asserted );
701 int UtcDaliCameraActorGetTargetPositionP(void)
703 TestApplication application;
704 tet_infoline( "Testing Dali::CameraActor Get Target Position (P)" );
706 CameraActor actor = CameraActor::New();
707 Vector3 defaultValue( Vector3::ZERO );
708 DALI_TEST_EQUALS( actor.GetTargetPosition(), defaultValue, TEST_LOCATION );
710 // Check getting the property.
712 actor.GetProperty( CameraActor::Property::TARGET_POSITION ).Get( value );
713 DALI_TEST_EQUALS( defaultValue, value, FLOAT_EPSILON, TEST_LOCATION );
717 int UtcDaliCameraActorGetTargetPositionN(void)
719 TestApplication application;
720 tet_infoline( "Testing Dali::CameraActor Get Target Position (N)" );
724 bool asserted = true;
727 actor.GetTargetPosition();
729 catch( Dali::DaliException& e )
731 DALI_TEST_PRINT_ASSERT( e );
732 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
735 DALI_TEST_CHECK( asserted );
740 int UtcDaliCameraActorSetInvertYAxisP(void)
742 TestApplication application;
743 tet_infoline( "Testing Dali::CameraActor Set InvertYAxis (P)" );
745 CameraActor actor = CameraActor::New();
747 // Set a value so we are not relying on a particular default for this test case.
748 actor.SetInvertYAxis( false );
749 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
751 actor.SetInvertYAxis( true );
752 DALI_TEST_EQUALS( actor.GetInvertYAxis(), true, TEST_LOCATION );
754 actor.SetProperty( CameraActor::Property::INVERT_Y_AXIS, false );
755 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
759 int UtcDaliCameraActorSetInvertYAxisN(void)
761 TestApplication application;
762 tet_infoline( "Testing Dali::CameraActor Set InvertYAxis (N)" );
766 bool asserted = true;
769 actor.SetInvertYAxis( false );
771 catch( Dali::DaliException& e )
773 DALI_TEST_PRINT_ASSERT( e );
774 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
777 DALI_TEST_CHECK( asserted );
781 int UtcDaliCameraActorGetInvertYAxisP(void)
783 TestApplication application;
784 tet_infoline( "Testing Dali::CameraActor Get InvertYAxis (P)" );
786 // Check the default value.
787 CameraActor actor = CameraActor::New();
788 DALI_TEST_EQUALS( actor.GetInvertYAxis(), false, TEST_LOCATION );
790 // Check getting the property.
792 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
793 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
797 int UtcDaliCameraActorGetInvertYAxisN(void)
799 TestApplication application;
800 tet_infoline( "Testing Dali::CameraActor Get InvertYAxis (N)" );
804 bool asserted = true;
807 actor.GetInvertYAxis();
809 catch( Dali::DaliException& e )
811 DALI_TEST_PRINT_ASSERT( e );
812 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
815 DALI_TEST_CHECK( asserted );
819 int UtcDaliCameraActorSetPerspectiveProjectionP(void)
821 TestApplication application;
822 tet_infoline( "Testing Dali::CameraActor::SetPerspectiveProjection (P)" );
824 CameraActor actor = CameraActor::New();
825 actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
827 DALI_TEST_CHECK( actor );
830 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
831 DALI_TEST_EQUALS( 0.666666f, value, FLOAT_EPSILON, TEST_LOCATION );
832 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
833 DALI_TEST_EQUALS( 0.489957f, value, FLOAT_EPSILON, TEST_LOCATION );
834 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
835 DALI_TEST_EQUALS( 150.f, value, FLOAT_EPSILON, TEST_LOCATION );
836 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
837 DALI_TEST_EQUALS( 4245.f, value, FLOAT_EPSILON, TEST_LOCATION );
839 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
841 // Ensure these values persist after adding to the stage and an update/render pass
842 application.GetScene().Add( actor );
843 application.SendNotification();
844 application.Render();
846 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
847 DALI_TEST_EQUALS( 0.666666f, value, FLOAT_EPSILON, TEST_LOCATION );
848 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
849 DALI_TEST_EQUALS( 0.489957f, value, FLOAT_EPSILON, TEST_LOCATION );
850 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
851 DALI_TEST_EQUALS( 150.f, value, FLOAT_EPSILON, TEST_LOCATION );
852 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
853 DALI_TEST_EQUALS( 4245.f, value, FLOAT_EPSILON, TEST_LOCATION );
855 // Call method with a ZERO size, this should reset the perspective projection using the size of the scene we've been added to
856 actor.SetPerspectiveProjection( Vector2::ZERO );
858 DALI_TEST_EQUALS( 0.6f, actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
859 DALI_TEST_EQUALS( 0.489957f, actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
860 DALI_TEST_EQUALS( 800.0f, actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
861 DALI_TEST_EQUALS( 4895.0f, actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get< float >(), FLOAT_EPSILON, TEST_LOCATION );
862 DALI_TEST_EQUALS( 1600.0f, actor.GetProperty( Actor::Property::POSITION_Z ).Get< float >(), TEST_LOCATION );
863 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
868 int UtcDaliCameraActorSetPerspectiveProjectionN(void)
870 TestApplication application;
871 tet_infoline( "Testing Dali::CameraActor::SetPerspectiveProjection (N)" );
873 CameraActor actor = CameraActor::New();
875 // Check that setting perspective projection without a size does not do anything.
876 actor.SetPerspectiveProjection( Size::ZERO );
878 // So the default values should be the same as defined in CameraActor
879 float nearClippingPlane = 800.0f;
880 float farClippingPlane = nearClippingPlane + 2.0f * nearClippingPlane;
882 DALI_TEST_EQUALS( nearClippingPlane, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
883 DALI_TEST_EQUALS( farClippingPlane, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
884 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
889 int UtcDaliCameraActorSetOrthographicProjectionP1(void)
891 TestApplication application;
892 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,1)" );
894 CameraActor actor = CameraActor::New( Size( 1080.0f, 1920.0f ) );
895 DALI_TEST_CHECK( actor );
897 application.GetScene().Add( actor );
899 actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
900 application.SendNotification();
901 application.Render( 0 );
902 application.Render();
903 application.SendNotification();
905 float defaultAspectRatio;
906 float defaultFieldOfView;
907 float defaultNearPlaneDistance;
908 float defaultFarPlaneDistance;
909 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
910 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
911 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
912 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
913 Vector3 defaultPos = actor.GetCurrentProperty< Vector3 >( Actor::Property::POSITION );
915 actor.SetOrthographicProjection( Size( 1080.0f, 1920.0f ) );
917 application.SendNotification();
918 application.Render( 0 );
919 application.Render();
920 application.SendNotification();
923 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
924 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
925 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
926 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
927 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
928 DALI_TEST_EQUALS( defaultNearPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION );
929 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
930 DALI_TEST_EQUALS( defaultFarPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION );
932 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
933 DALI_TEST_EQUALS( -540.0f, value, FLOAT_EPSILON, TEST_LOCATION );
934 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
935 DALI_TEST_EQUALS( 540.0f, value, FLOAT_EPSILON, TEST_LOCATION );
936 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
937 DALI_TEST_EQUALS( 960.0f, value, FLOAT_EPSILON, TEST_LOCATION );
938 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
939 DALI_TEST_EQUALS( -960.0f, value, FLOAT_EPSILON, TEST_LOCATION );
941 Vector3 pos = actor.GetCurrentProperty< Vector3 >( Actor::Property::POSITION );
942 DALI_TEST_EQUALS( defaultPos.z, pos.z, 0.001f, TEST_LOCATION );
944 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
948 int UtcDaliCameraActorSetOrthographicProjectionN(void)
950 TestApplication application;
951 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (N)" );
954 bool asserted = true;
957 actor.GetProjectionMode();
959 catch( Dali::DaliException& e )
961 DALI_TEST_PRINT_ASSERT( e );
962 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
965 DALI_TEST_CHECK( asserted );
969 int UtcDaliCameraActorSetOrthographicProjectionP2(void)
971 TestApplication application;
972 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,2)" );
974 CameraActor actor = CameraActor::New();
975 DALI_TEST_CHECK( actor );
977 float defaultAspectRatio;
978 float defaultFieldOfView;
979 float defaultNearPlaneDistance;
980 float defaultFarPlaneDistance;
981 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
982 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
983 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
984 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
986 // Check setting with specific near and far plane distances.
987 actor.SetOrthographicProjection( -100.0f, 200.0f, -300.0f, 500.0f, 400.0f, 4000.0f );
990 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
991 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
992 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
993 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
994 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
995 DALI_TEST_EQUALS( 400.0f, value, FLOAT_EPSILON, TEST_LOCATION );
996 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
997 DALI_TEST_EQUALS( 4000.0f, value, FLOAT_EPSILON, TEST_LOCATION );
999 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
1000 DALI_TEST_EQUALS( -100.0f, value, FLOAT_EPSILON, TEST_LOCATION );
1001 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
1002 DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION );
1003 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
1004 DALI_TEST_EQUALS( -300.0f, value, FLOAT_EPSILON, TEST_LOCATION );
1005 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
1006 DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION );
1008 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1013 int UtcDaliCameraActorSetOrthographicProjectionP3(void)
1015 TestApplication application;
1016 tet_infoline( "Testing Dali::CameraActor::SetOrthographicProjection (P,3)" );
1018 CameraActor actor = CameraActor::New();
1019 DALI_TEST_CHECK( actor );
1021 float defaultAspectRatio;
1022 float defaultFieldOfView;
1023 float defaultNearPlaneDistance;
1024 float defaultFarPlaneDistance;
1025 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( defaultAspectRatio );
1026 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( defaultFieldOfView );
1027 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( defaultNearPlaneDistance );
1028 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( defaultFarPlaneDistance );
1030 actor.SetProjectionMode( Dali::Camera::ORTHOGRAPHIC_PROJECTION );
1032 actor.SetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE, -100.0f );
1033 actor.SetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE, 200.0f );
1034 actor.SetProperty( CameraActor::Property::TOP_PLANE_DISTANCE, -300.0f );
1035 actor.SetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE, 500.0f );
1036 actor.SetNearClippingPlane( 400.0f );
1037 actor.SetFarClippingPlane( 4000.0f );
1040 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
1041 DALI_TEST_EQUALS( defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION );
1042 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
1043 DALI_TEST_EQUALS( defaultFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION );
1044 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
1045 DALI_TEST_EQUALS( 400.0f, value, FLOAT_EPSILON, TEST_LOCATION );
1046 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value );
1047 DALI_TEST_EQUALS( 4000.0f, value, FLOAT_EPSILON, TEST_LOCATION );
1049 actor.GetProperty( CameraActor::Property::LEFT_PLANE_DISTANCE ).Get( value );
1050 DALI_TEST_EQUALS( -100.0f, value, FLOAT_EPSILON, TEST_LOCATION );
1051 actor.GetProperty( CameraActor::Property::RIGHT_PLANE_DISTANCE ).Get( value );
1052 DALI_TEST_EQUALS( 200.0f, value, FLOAT_EPSILON, TEST_LOCATION );
1053 actor.GetProperty( CameraActor::Property::TOP_PLANE_DISTANCE ).Get( value );
1054 DALI_TEST_EQUALS( -300.0f, value, FLOAT_EPSILON, TEST_LOCATION );
1055 actor.GetProperty( CameraActor::Property::BOTTOM_PLANE_DISTANCE ).Get( value );
1056 DALI_TEST_EQUALS( 500.0f, value, FLOAT_EPSILON, TEST_LOCATION );
1058 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1059 std::string stringValue;
1060 actor.GetProperty( CameraActor::Property::PROJECTION_MODE ).Get( stringValue );
1061 DALI_TEST_EQUALS( stringValue, "ORTHOGRAPHIC_PROJECTION", TEST_LOCATION );
1065 int UtcDaliCameraActorSetProjectionModeP(void)
1067 TestApplication application;
1068 tet_infoline( "Testing Dali::CameraActor::SetProjectionModeP (P)" );
1070 CameraActor actor = CameraActor::New();
1072 // Check that changing the projection mode alone does not alter other presets.
1073 actor.SetNearClippingPlane( 200.0f );
1074 actor.SetFarClippingPlane( 400.0f );
1076 actor.SetProjectionMode( Dali::Camera::PERSPECTIVE_PROJECTION );
1078 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1079 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION );
1080 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION );
1082 actor.SetProjectionMode( Dali::Camera::ORTHOGRAPHIC_PROJECTION );
1084 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1085 DALI_TEST_EQUALS( actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION );
1086 DALI_TEST_EQUALS( actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION );
1088 // Check setting the property.
1089 Property::Value setValue = "PERSPECTIVE_PROJECTION";
1090 actor.SetProperty( CameraActor::Property::PROJECTION_MODE, setValue );
1091 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1095 int UtcDaliCameraActorSetProjectionModeN(void)
1097 TestApplication application;
1098 tet_infoline( "Testing Dali::CameraActor::SetProjectionModeP (N)" );
1102 bool asserted = true;
1105 actor.SetProjectionMode( Dali::Camera::PERSPECTIVE_PROJECTION );
1107 catch( Dali::DaliException& e )
1109 DALI_TEST_PRINT_ASSERT( e );
1110 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
1113 DALI_TEST_CHECK( asserted );
1117 int UtcDaliCameraActorGetProjectionModeP(void)
1119 TestApplication application;
1120 tet_infoline( "Testing Dali::CameraActor::GetPerspectiveProjection (P)" );
1122 CameraActor actor = CameraActor::New();
1124 actor.SetOrthographicProjection( Size::ONE );
1125 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION );
1127 actor.SetPerspectiveProjection( Size( 100.f, 150.f ) );
1128 DALI_TEST_EQUALS( actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION );
1130 // Check getting the property.
1131 std::string stringValue;
1132 actor.GetProperty( CameraActor::Property::PROJECTION_MODE ).Get( stringValue );
1133 DALI_TEST_EQUALS( stringValue, "PERSPECTIVE_PROJECTION", TEST_LOCATION );
1137 int UtcDaliCameraActorGetProjectionModeN(void)
1139 TestApplication application;
1140 tet_infoline( "Testing Dali::CameraActor::GetProjectionMode (N)" );
1144 bool asserted = true;
1147 actor.GetProjectionMode();
1149 catch( Dali::DaliException& e )
1151 DALI_TEST_PRINT_ASSERT( e );
1152 DALI_TEST_ASSERT( e, "camera && \"Camera handle is empty\"", TEST_LOCATION );
1155 DALI_TEST_CHECK( asserted );
1159 int UtcDaliCameraActorSetCameraOffScene(void)
1161 TestApplication application;
1162 tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
1164 CameraActor actor = CameraActor::New();
1166 actor.SetType( Camera::FREE_LOOK );
1167 actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
1168 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1169 actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
1170 actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
1171 actor.SetProjectionMode( Camera::PERSPECTIVE_PROJECTION );
1173 actor.SetInvertYAxis( false );
1175 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );//change to machine epsilon
1176 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1177 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1178 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1179 DALI_TEST_EQUALS( Camera::PERSPECTIVE_PROJECTION, actor.GetProjectionMode(), TEST_LOCATION );
1180 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1184 actor.GetProperty( CameraActor::Property::ASPECT_RATIO).Get( value );
1185 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
1186 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW).Get( value );
1187 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
1188 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE).Get( value );
1189 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1190 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE).Get( value );
1191 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1192 actor.GetProperty( CameraActor::Property::PROJECTION_MODE).Get( sValue );
1193 DALI_TEST_EQUALS( "PERSPECTIVE_PROJECTION", sValue, TEST_LOCATION );
1195 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS).Get( bValue );
1196 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1200 int UtcDaliCameraActorSetCameraOnScene(void)
1202 TestApplication application;
1203 tet_infoline( "Testing Dali::CameraActor::SetCamera()" );
1205 CameraActor actor = CameraActor::New();
1206 application.GetScene().Add( actor );
1207 application.Render( 0 );
1208 application.SendNotification();
1210 actor.SetType( Camera::LOOK_AT_TARGET );
1211 actor.SetFieldOfView( TEST_FIELD_OF_VIEW );
1212 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1213 actor.SetNearClippingPlane( TEST_NEAR_PLANE_DISTANCE );
1214 actor.SetFarClippingPlane( TEST_FAR_PLANE_DISTANCE );
1215 actor.SetInvertYAxis( false );
1217 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1219 // Will need 2 frames to ensure both buffers are set to same values:
1220 application.Render();
1221 application.SendNotification();
1222 application.Render();
1223 application.SendNotification();
1225 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
1226 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1227 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1228 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1229 DALI_TEST_EQUALS( false, actor.GetInvertYAxis(), TEST_LOCATION );
1232 actor.GetProperty( CameraActor::Property::TYPE ).Get( sValue );
1233 DALI_TEST_EQUALS( sValue, "LOOK_AT_TARGET", TEST_LOCATION );
1236 actor.GetProperty( CameraActor::Property::ASPECT_RATIO ).Get( value );
1237 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION );
1238 actor.GetProperty( CameraActor::Property::FIELD_OF_VIEW ).Get( value );
1239 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION );
1240 actor.GetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE ).Get( value );
1241 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1242 actor.GetProperty( CameraActor::Property::FAR_PLANE_DISTANCE ).Get( value);
1243 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION );
1246 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
1247 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1251 int UtcDaliCameraActorGetCamera(void)
1253 TestApplication application;
1254 tet_infoline( "Testing Dali::CameraActor::GetCamera()" );
1256 CameraActor actor = CameraActor::New();
1258 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1260 DALI_TEST_EQUALS( actor.GetAspectRatio(), TEST_ASPECT_RATIO, FLOAT_EPSILON, TEST_LOCATION );
1262 actor.SetProperty( CameraActor::Property::TYPE, "FREE_LOOK" );
1263 actor.SetProperty( CameraActor::Property::ASPECT_RATIO, TEST_ASPECT_RATIO );
1264 actor.SetProperty( CameraActor::Property::FIELD_OF_VIEW, TEST_FIELD_OF_VIEW );
1265 actor.SetProperty( CameraActor::Property::NEAR_PLANE_DISTANCE, TEST_NEAR_PLANE_DISTANCE );
1266 actor.SetProperty( CameraActor::Property::FAR_PLANE_DISTANCE, TEST_FAR_PLANE_DISTANCE );
1268 DALI_TEST_EQUALS( Camera::FREE_LOOK, actor.GetType(), TEST_LOCATION );
1269 DALI_TEST_EQUALS( TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION );
1270 DALI_TEST_EQUALS( TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION );
1271 DALI_TEST_EQUALS( TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1272 DALI_TEST_EQUALS( TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION );
1276 int UtcDaliCameraActorDefaultProperties(void)
1278 TestApplication application;
1279 tet_infoline( "Testing Dali::CameraActor DefaultProperties" );
1281 CameraActor actor = CameraActor::New();
1282 Integration::Scene stage = application.GetScene();
1284 stage.GetRenderTaskList().GetTask(0).SetCameraActor( actor );
1286 actor.SetAspectRatio( TEST_ASPECT_RATIO );
1287 application.GetScene().Add( actor );
1288 application.Render( 0 );
1289 application.SendNotification();
1291 actor.GetProperty( CameraActor::Property::INVERT_Y_AXIS ).Get( bValue );
1292 DALI_TEST_EQUALS( false, bValue, TEST_LOCATION );
1294 std::vector<Property::Index> indices ;
1295 indices.push_back( CameraActor::Property::TYPE );
1296 indices.push_back( CameraActor::Property::PROJECTION_MODE );
1297 indices.push_back( CameraActor::Property::FIELD_OF_VIEW );
1298 indices.push_back( CameraActor::Property::ASPECT_RATIO );
1299 indices.push_back( CameraActor::Property::NEAR_PLANE_DISTANCE );
1300 indices.push_back( CameraActor::Property::FAR_PLANE_DISTANCE );
1301 indices.push_back( CameraActor::Property::LEFT_PLANE_DISTANCE );
1302 indices.push_back( CameraActor::Property::RIGHT_PLANE_DISTANCE );
1303 indices.push_back( CameraActor::Property::TOP_PLANE_DISTANCE );
1304 indices.push_back( CameraActor::Property::BOTTOM_PLANE_DISTANCE );
1305 indices.push_back( CameraActor::Property::TARGET_POSITION );
1306 indices.push_back( CameraActor::Property::PROJECTION_MATRIX );
1307 indices.push_back( CameraActor::Property::VIEW_MATRIX );
1308 indices.push_back( CameraActor::Property::INVERT_Y_AXIS );
1310 DALI_TEST_CHECK( actor.GetPropertyCount() == ( Actor::New().GetPropertyCount() + indices.size() ) );
1312 for( std::vector<Property::Index>::iterator iter = indices.begin(); iter != indices.end(); ++iter )
1314 DALI_TEST_EQUALS( *iter, actor.GetPropertyIndex( actor.GetPropertyName( *iter ) ), TEST_LOCATION);
1315 DALI_TEST_CHECK( !actor.IsPropertyAnimatable( *iter ) );
1317 if ( ( *iter == CameraActor::Property::PROJECTION_MATRIX ) ||
1318 ( *iter == CameraActor::Property::VIEW_MATRIX ) )
1320 DALI_TEST_CHECK( !actor.IsPropertyWritable( *iter ) );
1324 DALI_TEST_CHECK( actor.IsPropertyWritable( *iter ) );
1327 DALI_TEST_CHECK( actor.GetPropertyType( *iter ) == actor.GetPropertyType( *iter ) ); // just checking call succeeds
1330 // Set/Get one of them.
1331 const float newAspect = TEST_ASPECT_RATIO * 2.0f;
1333 actor.SetProperty( CameraActor::Property::ASPECT_RATIO, Property::Value( newAspect ) );
1334 application.Render();
1335 application.SendNotification();
1336 application.Render();
1337 application.SendNotification();
1339 DALI_TEST_EQUALS( actor.GetAspectRatio(), newAspect, TEST_LOCATION );
1343 template< typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
1344 void TEST_CAMERA_PROPERTY( P1 camera, P2 stringName, P3 type, P4 isWriteable, P5 isAnimateable, P6 isConstraintInput, P7 enumName, P8 LOCATION )
1346 DALI_TEST_EQUALS( camera.GetPropertyName( enumName ), stringName, LOCATION );
1347 DALI_TEST_EQUALS( camera.GetPropertyIndex( stringName ), static_cast<Property::Index>(enumName), LOCATION );
1348 DALI_TEST_EQUALS( camera.GetPropertyType( enumName ), type, LOCATION );
1349 DALI_TEST_EQUALS( camera.IsPropertyWritable( enumName ), isWriteable, LOCATION );
1350 DALI_TEST_EQUALS( camera.IsPropertyAnimatable( enumName ), isAnimateable, LOCATION );
1351 DALI_TEST_EQUALS( camera.IsPropertyAConstraintInput( enumName ), isConstraintInput, LOCATION );
1353 int UtcDaliCameraActorDefaultPropertiesInherited(void)
1355 TestApplication application;
1357 CameraActor actor = CameraActor::New();
1358 Integration::Scene stage = application.GetScene();
1360 stage.GetRenderTaskList().GetTask(0).SetCameraActor( actor );
1362 application.GetScene().Add( actor );
1363 application.Render( 0 );
1364 application.SendNotification();
1366 const PropertyDetails CAMERA_DEFAULT_PROPERTY[] =
1369 { "parentOrigin", Property::VECTOR3, true, false, true, Dali::Actor::Property::PARENT_ORIGIN },
1370 { "parentOriginX", Property::FLOAT, true, false, true, Dali::Actor::Property::PARENT_ORIGIN_X },
1371 { "parentOriginY", Property::FLOAT, true, false, true, Dali::Actor::Property::PARENT_ORIGIN_Y },
1372 { "parentOriginZ", Property::FLOAT, true, false, true, Dali::Actor::Property::PARENT_ORIGIN_Z },
1373 { "anchorPoint", Property::VECTOR3, true, false, true, Dali::Actor::Property::ANCHOR_POINT },
1374 { "anchorPointX", Property::FLOAT, true, false, true, Dali::Actor::Property::ANCHOR_POINT_X },
1375 { "anchorPointY", Property::FLOAT, true, false, true, Dali::Actor::Property::ANCHOR_POINT_Y },
1376 { "anchorPointZ", Property::FLOAT, true, false, true, Dali::Actor::Property::ANCHOR_POINT_Z },
1377 { "size", Property::VECTOR3, true, true, true, Dali::Actor::Property::SIZE },
1378 { "sizeWidth", Property::FLOAT, true, true, true, Dali::Actor::Property::SIZE_WIDTH },
1379 { "sizeHeight", Property::FLOAT, true, true, true, Dali::Actor::Property::SIZE_HEIGHT },
1380 { "sizeDepth", Property::FLOAT, true, true, true, Dali::Actor::Property::SIZE_DEPTH },
1381 { "position", Property::VECTOR3, true, true, true, Dali::Actor::Property::POSITION },
1382 { "positionX", Property::FLOAT, true, true, true, Dali::Actor::Property::POSITION_X },
1383 { "positionY", Property::FLOAT, true, true, true, Dali::Actor::Property::POSITION_Y },
1384 { "positionZ", Property::FLOAT, true, true, true, Dali::Actor::Property::POSITION_Z },
1385 { "worldPosition", Property::VECTOR3, false, false, true, Dali::Actor::Property::WORLD_POSITION },
1386 { "worldPositionX", Property::FLOAT, false, false, true, Dali::Actor::Property::WORLD_POSITION_X },
1387 { "worldPositionY", Property::FLOAT, false, false, true, Dali::Actor::Property::WORLD_POSITION_Y },
1388 { "worldPositionZ", Property::FLOAT, false, false, true, Dali::Actor::Property::WORLD_POSITION_Z },
1389 { "orientation", Property::ROTATION, true, true, true, Dali::Actor::Property::ORIENTATION },
1390 { "worldOrientation", Property::ROTATION, false, false, true, Dali::Actor::Property::WORLD_ORIENTATION },
1391 { "scale", Property::VECTOR3, true, true, true, Dali::Actor::Property::SCALE },
1392 { "scaleX", Property::FLOAT, true, true, true, Dali::Actor::Property::SCALE_X },
1393 { "scaleY", Property::FLOAT, true, true, true, Dali::Actor::Property::SCALE_Y },
1394 { "scaleZ", Property::FLOAT, true, true, true, Dali::Actor::Property::SCALE_Z },
1395 { "worldScale", Property::VECTOR3, false, false, true, Dali::Actor::Property::WORLD_SCALE },
1396 { "visible", Property::BOOLEAN, true, true, true, Dali::Actor::Property::VISIBLE },
1397 { "color", Property::VECTOR4, true, true, true, Dali::Actor::Property::COLOR },
1398 { "colorRed", Property::FLOAT, true, true, true, Dali::Actor::Property::COLOR_RED },
1399 { "colorGreen", Property::FLOAT, true, true, true, Dali::Actor::Property::COLOR_GREEN },
1400 { "colorBlue", Property::FLOAT, true, true, true, Dali::Actor::Property::COLOR_BLUE },
1401 { "colorAlpha", Property::FLOAT, true, true, true, Dali::Actor::Property::COLOR_ALPHA },
1402 { "worldColor", Property::VECTOR4, false, false, true, Dali::Actor::Property::WORLD_COLOR },
1403 { "worldMatrix", Property::MATRIX, false, false, true, Dali::Actor::Property::WORLD_MATRIX },
1404 { "name", Property::STRING, true, false, false, Dali::Actor::Property::NAME },
1405 { "sensitive", Property::BOOLEAN, true, false, false, Dali::Actor::Property::SENSITIVE },
1406 { "leaveRequired", Property::BOOLEAN, true, false, false, Dali::Actor::Property::LEAVE_REQUIRED },
1407 { "inheritOrientation", Property::BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_ORIENTATION },
1408 { "inheritScale", Property::BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_SCALE },
1409 { "colorMode", Property::INTEGER, true, false, false, Dali::Actor::Property::COLOR_MODE },
1410 { "drawMode", Property::INTEGER, true, false, false, Dali::Actor::Property::DRAW_MODE },
1411 { "sizeModeFactor", Property::VECTOR3, true, false, false, Dali::Actor::Property::SIZE_MODE_FACTOR },
1412 { "widthResizePolicy", Property::STRING, true, false, false, Dali::Actor::Property::WIDTH_RESIZE_POLICY },
1413 { "heightResizePolicy", Property::STRING, true, false, false, Dali::Actor::Property::HEIGHT_RESIZE_POLICY },
1414 { "sizeScalePolicy", Property::INTEGER, true, false, false, Dali::Actor::Property::SIZE_SCALE_POLICY },
1415 { "widthForHeight", Property::BOOLEAN, true, false, false, Dali::Actor::Property::WIDTH_FOR_HEIGHT },
1416 { "heightForWidth", Property::BOOLEAN, true, false, false, Dali::Actor::Property::HEIGHT_FOR_WIDTH },
1417 { "padding", Property::VECTOR4, true, false, false, Dali::Actor::Property::PADDING },
1418 { "minimumSize", Property::VECTOR2, true, false, false, Dali::Actor::Property::MINIMUM_SIZE },
1419 { "maximumSize", Property::VECTOR2, true, false, false, Dali::Actor::Property::MAXIMUM_SIZE },
1420 { "inheritPosition", Property::BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_POSITION },
1421 { "clippingMode", Property::STRING, true, false, false, Dali::Actor::Property::CLIPPING_MODE },
1422 { "layoutDirection", Property::STRING, true, false, false, Dali::Actor::Property::LAYOUT_DIRECTION },
1423 { "inheritLayoutDirection", Property::BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_LAYOUT_DIRECTION },
1424 { "opacity", Property::FLOAT, true, true, true, Dali::Actor::Property::OPACITY },
1425 { "screenPosition", Property::VECTOR2, false, false, false, Dali::Actor::Property::SCREEN_POSITION },
1426 { "positionUsesAnchorPoint",Property::BOOLEAN, true, false, false, Dali::Actor::Property::POSITION_USES_ANCHOR_POINT },
1427 { "culled", Property::BOOLEAN, false, false, true, Dali::Actor::Property::CULLED },
1428 { "id", Property::INTEGER, false, false, false, Dali::Actor::Property::ID },
1429 { "hierarchyDepth", Property::INTEGER, false, false, false, Dali::Actor::Property::HIERARCHY_DEPTH },
1430 { "isRoot", Property::BOOLEAN, false, false, false, Dali::Actor::Property::IS_ROOT },
1431 { "isLayer", Property::BOOLEAN, false, false, false, Dali::Actor::Property::IS_LAYER },
1432 { "connectedToScene", Property::BOOLEAN, false, false, false, Dali::Actor::Property::CONNECTED_TO_SCENE },
1433 { "keyboardFocusable", Property::BOOLEAN, true, false, false, Dali::Actor::Property::KEYBOARD_FOCUSABLE },
1434 { "siblingOrder", Property::INTEGER, true, false, false, Dali::DevelActor::Property::SIBLING_ORDER },
1436 { "type", Property::STRING, true, false, true, Dali::CameraActor::Property::TYPE },
1437 { "projectionMode", Property::STRING, true, false, true, Dali::CameraActor::Property::PROJECTION_MODE },
1438 { "fieldOfView", Property::FLOAT, true, false, true, Dali::CameraActor::Property::FIELD_OF_VIEW },
1439 { "aspectRatio", Property::FLOAT, true, false, true, Dali::CameraActor::Property::ASPECT_RATIO },
1440 { "nearPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::NEAR_PLANE_DISTANCE },
1441 { "farPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::FAR_PLANE_DISTANCE },
1442 { "leftPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::LEFT_PLANE_DISTANCE },
1443 { "rightPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::RIGHT_PLANE_DISTANCE },
1444 { "topPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::TOP_PLANE_DISTANCE },
1445 { "bottomPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::BOTTOM_PLANE_DISTANCE },
1446 { "targetPosition", Property::VECTOR3, true, false, true, Dali::CameraActor::Property::TARGET_POSITION },
1447 { "projectionMatrix", Property::MATRIX, false, false, true, Dali::CameraActor::Property::PROJECTION_MATRIX },
1448 { "viewMatrix", Property::MATRIX, false, false, true, Dali::CameraActor::Property::VIEW_MATRIX },
1449 { "invertYAxis", Property::BOOLEAN, true, false, true, Dali::CameraActor::Property::INVERT_Y_AXIS }
1452 for( uint32_t index = 0; index < (sizeof(CAMERA_DEFAULT_PROPERTY)/sizeof(PropertyDetails)); ++index )
1454 TEST_CAMERA_PROPERTY( actor,
1455 CAMERA_DEFAULT_PROPERTY[ index ].name,
1456 CAMERA_DEFAULT_PROPERTY[ index ].type,
1457 CAMERA_DEFAULT_PROPERTY[ index ].writable,
1458 CAMERA_DEFAULT_PROPERTY[ index ].animatable,
1459 CAMERA_DEFAULT_PROPERTY[ index ].constraintInput,
1460 CAMERA_DEFAULT_PROPERTY[ index ].enumIndex,
1466 int UtcDaliCameraActorModelView(void)
1468 TestApplication application;
1469 tet_infoline( "Testing Dali::CameraActor Test view application" );
1471 Actor actor = CreateRenderableActor();
1472 actor.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
1473 actor.SetProperty( Actor::Property::POSITION, Vector3( 20.0f, 30.0f, 40.0f ));
1474 actor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
1475 application.GetScene().Add( actor );
1477 application.SendNotification();
1478 application.Render( 0 );
1479 application.Render();
1480 application.SendNotification();
1482 Matrix resultMatrix( true );
1483 resultMatrix.SetTransformComponents( Vector3::ONE, Quaternion::IDENTITY, actor.GetCurrentProperty< Vector3 >( Actor::Property::POSITION ) );
1485 RenderTask task = application.GetScene().GetRenderTaskList().GetTask( 0 );
1486 CameraActor cameraActor = task.GetCameraActor();
1488 Matrix viewMatrix( false );
1489 cameraActor.GetProperty( CameraActor::Property::VIEW_MATRIX ).Get( viewMatrix );
1490 Matrix::Multiply( resultMatrix, resultMatrix, viewMatrix );
1492 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( "uModelView", resultMatrix ) );
1496 int UtcDaliCameraActorReadProjectionMatrix(void)
1498 TestApplication application;
1499 tet_infoline( "Testing Dali::CameraActor::ReadProjectionMatrix()" );
1501 CameraActor camera = application.GetScene().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1502 application.SendNotification();
1503 application.Render( 0 );
1504 application.Render();
1505 application.SendNotification();
1506 Texture image = Texture::New(TextureType::TEXTURE_2D, Pixel::RGBA8888, 4u, 4u);
1507 Actor actor = CreateRenderableActor( image, RENDER_SHADOW_VERTEX_SOURCE, RENDER_SHADOW_FRAGMENT_SOURCE );
1508 actor.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
1509 application.GetScene().Add( actor );
1511 Matrix projectionMatrix;
1514 camera.GetProperty( CameraActor::CameraActor::Property::PROJECTION_MATRIX ).Get( projectionMatrix );
1515 camera.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( viewMatrix );
1517 actor.RegisterProperty( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
1518 actor.RegisterProperty( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME, Matrix::IDENTITY );
1520 Property::Index projectionMatrixPropertyIndex = actor.GetPropertyIndex( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME );
1521 Property::Index viewMatrixPropertyIndex = actor.GetPropertyIndex( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME );
1523 Constraint projectionMatrixConstraint = Constraint::New<Dali::Matrix>( actor, projectionMatrixPropertyIndex, EqualToConstraint() );
1524 projectionMatrixConstraint.AddSource( Source( camera, CameraActor::Property::PROJECTION_MATRIX ) );
1525 Constraint viewMatrixConstraint = Constraint::New<Dali::Matrix>( actor, viewMatrixPropertyIndex, EqualToConstraint() );
1526 viewMatrixConstraint.AddSource( Source( camera, CameraActor::Property::VIEW_MATRIX ) );
1528 projectionMatrixConstraint.Apply();
1529 viewMatrixConstraint.Apply();
1531 application.SendNotification();
1532 application.Render();
1534 // Test effects of Constraint.
1535 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME.c_str(), projectionMatrix) );
1537 DALI_TEST_CHECK( application.GetGlAbstraction().CheckUniformValue( SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME.c_str(), viewMatrix ) );
1541 int UtcDaliCameraActorAnimatedProperties(void)
1543 TestApplication application;
1544 tet_infoline( "Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()" );
1546 CameraActor camera = application.GetScene().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1547 Actor actor = Actor::New();
1548 actor.SetProperty( Actor::Property::SIZE, Vector2( 100.0f, 100.0f ) );
1549 application.GetScene().Add( actor );
1551 Constraint constraint = Constraint::New<Dali::Vector3>( actor, Actor::Property::POSITION, EqualToConstraint() );
1552 constraint.AddSource( Source( camera, Actor::Property::POSITION ) );
1555 camera.SetProperty( Actor::Property::POSITION, Vector3( 100.0f, 200.0f, 300.0f ));
1556 application.SendNotification();
1557 application.Render();
1559 DALI_TEST_EQUALS( actor.GetCurrentProperty< Vector3 >( Actor::Property::POSITION ), Vector3( 100.0f, 200.0f, 300.0f ), TEST_LOCATION);
1563 int UtcDaliCameraActorPropertyIndices(void)
1565 TestApplication application;
1566 CameraActor camera = application.GetScene().GetRenderTaskList().GetTask( 0u ).GetCameraActor();
1568 Actor basicActor = Actor::New();
1569 Property::IndexContainer indices;
1570 camera.GetPropertyIndices( indices );
1571 DALI_TEST_CHECK( indices.Size() > basicActor.GetPropertyCount() );
1572 DALI_TEST_EQUALS( indices.Size(), camera.GetPropertyCount(), TEST_LOCATION );
1576 int UtcDaliCameraActorCheckLookAtAndFreeLookViews01(void)
1578 TestApplication application;
1579 Integration::Scene stage = application.GetScene();
1580 Vector2 stageSize = stage.GetSize();
1582 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1583 freeLookCameraActor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
1584 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1586 Vector3 targetPosition( 30.0f, 240.0f, -256.0f );
1587 Actor target = Actor::New();
1588 target.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
1589 target.SetProperty( Actor::Property::POSITION, targetPosition );
1591 Constraint cameraOrientationConstraint = Constraint::New<Quaternion> ( freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt );
1592 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_POSITION ) );
1593 cameraOrientationConstraint.AddSource( Source( freeLookCameraActor, Actor::Property::WORLD_POSITION ) );
1594 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_ORIENTATION ) );
1595 cameraOrientationConstraint.Apply();
1597 CameraActor lookAtCameraActor = CameraActor::New( stageSize );
1598 lookAtCameraActor.SetType( Camera::LOOK_AT_TARGET );
1599 lookAtCameraActor.SetTargetPosition( targetPosition );
1600 lookAtCameraActor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
1602 stage.Add( target );
1603 stage.Add( freeLookCameraActor );
1604 stage.Add( lookAtCameraActor );
1606 // Create an arbitrary vector
1607 for( float x=-1.0f; x<=1.0f; x+=0.1f )
1609 for( float y=-1.0f; y<1.0f; y+=0.1f )
1611 for( float z=-1.0f; z<1.0f; z+=0.1f )
1613 Vector3 position( x, y, z );
1614 position.Normalize();
1617 freeLookCameraActor.SetProperty( Actor::Property::POSITION, position );
1618 lookAtCameraActor.SetProperty( Actor::Property::POSITION, position );
1620 application.SendNotification();
1621 application.Render();
1622 application.SendNotification();
1623 application.Render();
1624 Matrix freeLookViewMatrix;
1625 Matrix lookAtViewMatrix;
1626 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1627 lookAtCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( lookAtViewMatrix );
1629 DALI_TEST_EQUALS( freeLookViewMatrix, lookAtViewMatrix, 0.01, TEST_LOCATION );
1636 int UtcDaliCameraActorCheckLookAtAndFreeLookViews02(void)
1638 TestApplication application;
1639 Integration::Scene stage = application.GetScene();
1640 Vector2 stageSize = stage.GetSize();
1642 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1643 freeLookCameraActor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
1644 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1646 Vector3 targetPosition( 30.0f, 240.0f, -256.0f );
1647 Actor target = Actor::New();
1648 target.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
1649 target.SetProperty( Actor::Property::POSITION, targetPosition );
1651 Constraint cameraOrientationConstraint = Constraint::New<Quaternion> ( freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt );
1652 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_POSITION ) );
1653 cameraOrientationConstraint.AddSource( Source( freeLookCameraActor, Actor::Property::WORLD_POSITION ) );
1654 cameraOrientationConstraint.AddSource( Source( target, Actor::Property::WORLD_ORIENTATION ) );
1655 cameraOrientationConstraint.Apply();
1657 CameraActor lookAtCameraActor = CameraActor::New( stageSize );
1658 lookAtCameraActor.SetType( Camera::LOOK_AT_TARGET );
1659 lookAtCameraActor.SetTargetPosition( targetPosition );
1660 lookAtCameraActor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
1662 stage.Add( target );
1663 stage.Add( freeLookCameraActor );
1664 stage.Add( lookAtCameraActor );
1665 stage.GetRenderTaskList().GetTask(0).SetCameraActor( freeLookCameraActor );
1667 // Create an arbitrary vector
1668 for( float x=-1.0f; x<=1.0f; x+=0.1f )
1670 for( float y=-1.0f; y<1.0f; y+=0.1f )
1672 for( float z=-1.0f; z<1.0f; z+=0.1f )
1674 Vector3 position( x, y, z );
1675 position.Normalize();
1678 freeLookCameraActor.SetProperty( Actor::Property::POSITION, position );
1679 lookAtCameraActor.SetProperty( Actor::Property::POSITION, position );
1681 application.SendNotification();
1682 application.Render();
1683 application.SendNotification();
1684 application.Render();
1685 Matrix freeLookViewMatrix;
1686 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1688 Matrix freeLookWorld = freeLookCameraActor.GetCurrentProperty< Matrix >( Actor::Property::WORLD_MATRIX );
1690 Matrix freeLookTest( false );
1691 Matrix::Multiply( freeLookTest, freeLookViewMatrix, freeLookWorld );
1692 DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION );
1700 int UtcDaliCameraActorCheckLookAtAndFreeLookViews03(void)
1702 TestApplication application;
1703 Integration::Scene stage = application.GetScene();
1704 Vector2 stageSize = stage.GetSize();
1706 Vector3 targetPosition( Vector3::ZERO );
1707 Vector3 cameraOffset( 0.0f, 0.0f, 100.0f );
1709 CameraActor freeLookCameraActor = CameraActor::New( stageSize );
1710 freeLookCameraActor.SetType( Camera::FREE_LOOK );
1711 freeLookCameraActor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
1713 Quaternion cameraOrientation( Radian( Degree( 180.0f ) ), Vector3::YAXIS );
1714 freeLookCameraActor.SetProperty( Actor::Property::POSITION, cameraOffset );
1715 freeLookCameraActor.SetProperty( Actor::Property::ORIENTATION, cameraOrientation );
1717 Actor cameraAnchor = Actor::New();
1718 cameraAnchor.Add( freeLookCameraActor );
1719 stage.Add( cameraAnchor );
1720 stage.GetRenderTaskList().GetTask(0).SetCameraActor( freeLookCameraActor );
1722 for( float angle = 1.0f; angle <= 180.0f; angle += 1.0f )
1724 Quaternion rotation( Radian( Degree( angle ) ), Vector3::YAXIS );
1726 freeLookCameraActor.SetProperty( Actor::Property::POSITION, rotation.Rotate( cameraOffset ) );
1727 cameraAnchor.SetProperty( Actor::Property::ORIENTATION, rotation );
1729 application.SendNotification();
1730 application.Render();
1731 application.SendNotification();
1732 application.Render();
1734 Matrix freeLookViewMatrix;
1735 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( freeLookViewMatrix );
1737 Matrix freeLookWorld = freeLookCameraActor.GetCurrentProperty< Matrix >( Actor::Property::WORLD_MATRIX );
1739 Matrix freeLookTest( false );
1740 Matrix::Multiply( freeLookTest, freeLookViewMatrix, freeLookWorld );
1741 DALI_TEST_EQUALS( freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION );
1746 int UtcDaliCameraActorReflectionByPlane(void)
1748 TestApplication application;
1750 Integration::Scene stage = application.GetScene();
1752 Vector3 targetPosition( Vector3::ZERO );
1753 Vector3 cameraOffset( 0.0f, 100.0f, 100.0f );
1755 CameraActor freeLookCameraActor = stage.GetRenderTaskList().GetTask(0).GetCameraActor();
1756 freeLookCameraActor.SetType(Camera::LOOK_AT_TARGET);
1757 freeLookCameraActor.SetTargetPosition( targetPosition );
1758 freeLookCameraActor.SetProperty( Actor::Property::POSITION, cameraOffset );
1760 stage.GetRootLayer().SetProperty( Actor::Property::POSITION, Vector2( 1, 0 ));
1762 application.SendNotification();
1763 application.Render();
1764 application.SendNotification();
1765 application.Render();
1767 Matrix matrixBefore, matrixAfter;
1768 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( matrixBefore );
1769 freeLookCameraActor.SetProperty( Dali::DevelCameraActor::Property::REFLECTION_PLANE, Vector4( 0.0f, 1.0f, 0.0f, 0.0f));
1770 stage.GetRootLayer().SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
1771 application.SendNotification();
1772 application.Render();
1773 application.SendNotification();
1774 application.Render();
1776 freeLookCameraActor.GetProperty( CameraActor::CameraActor::Property::VIEW_MATRIX ).Get( matrixAfter );
1778 Vector3 position, scale;
1779 Quaternion rotation;
1780 matrixAfter.GetTransformComponents( position, rotation, scale );
1782 Quaternion reflected( 0, 0, 1, 0 );
1784 DALI_TEST_EQUALS( reflected, rotation, 0.01f, TEST_LOCATION );
1786 // Test Free Look camera
1787 freeLookCameraActor.SetType(Camera::FREE_LOOK);
1789 // Make sure the recalculation will take place
1790 freeLookCameraActor.SetProperty( Dali::DevelCameraActor::Property::REFLECTION_PLANE, Vector4( 0.0f, 1.0f, 0.0f, 0.0f));
1792 application.SendNotification();
1793 application.Render();
1794 application.SendNotification();
1795 application.Render();
1797 // Nothing should change despite of different camera type
1798 matrixAfter.GetTransformComponents( position, rotation, scale );
1799 DALI_TEST_EQUALS( reflected, rotation, 0.01f, TEST_LOCATION );