2 * Copyright (c) 2022 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.
18 #include <dali/public-api/dali-core.h>
20 #include <dali/devel-api/actors/actor-devel.h>
21 #include <dali/devel-api/actors/camera-actor-devel.h>
27 #include "dali-test-suite-utils/dali-test-suite-utils.h"
31 void camera_actor_test_startup(void)
33 test_return_value = TET_UNDEF;
36 void camera_actor_test_cleanup(void)
38 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
83 int UtcDaliCameraActorConstructorP(void)
85 TestApplication application;
86 tet_infoline("Testing Dali::CameraActor::CameraActor()");
90 DALI_TEST_CHECK(!actor);
94 // Note: No negative test for UtcDaliCameraActorConstructor.
96 int UtcDaliCameraActorDestructorP(void)
98 TestApplication application;
99 tet_infoline("Testing Dali::~CameraActor (P)");
100 CameraActor* actor = new CameraActor();
104 DALI_TEST_CHECK(true);
108 // Note: No negative test for UtcDaliCameraActorDestructor.
110 int UtcDaliCameraActorCopyConstructorP(void)
112 TestApplication application;
113 tet_infoline("Testing Dali::CameraActor Copy Constructor (P)");
114 CameraActor actor = CameraActor::New();
116 CameraActor copyActor(actor);
118 DALI_TEST_CHECK(copyActor);
119 DALI_TEST_CHECK(copyActor == actor);
124 int UtcDaliCameraActorCopyConstructorN(void)
126 TestApplication application;
127 tet_infoline("Testing Dali::CameraActor Copy Constructor (N)");
130 CameraActor copyActor(actor);
132 DALI_TEST_CHECK(!copyActor);
137 int UtcDaliCameraActorAssignmentOperatorP(void)
139 TestApplication application;
140 tet_infoline("Testing Dali::CameraActor Assignment Operator (P)");
141 const CameraActor actor = CameraActor::New();
143 CameraActor copyActor = actor;
145 DALI_TEST_CHECK(copyActor);
146 DALI_TEST_CHECK(copyActor == actor);
151 int UtcDaliCameraActorAssignmentOperatorN(void)
153 TestApplication application;
154 tet_infoline("Testing Dali::CameraActor = (N)");
157 CameraActor copyActor = actor;
159 DALI_TEST_CHECK(!copyActor);
164 int UtcDaliCameraActorMoveConstructor(void)
166 TestApplication application;
168 CameraActor actor = CameraActor::New();
169 DALI_TEST_CHECK(actor);
171 int id = actor.GetProperty<int>(Actor::Property::ID);
173 CameraActor moved = std::move(actor);
174 DALI_TEST_CHECK(moved);
175 DALI_TEST_EQUALS(id, moved.GetProperty<int>(Actor::Property::ID), TEST_LOCATION);
176 DALI_TEST_CHECK(!actor);
181 int UtcDaliCameraActorMoveAssignment(void)
183 TestApplication application;
185 CameraActor actor = CameraActor::New();
186 DALI_TEST_CHECK(actor);
188 int id = actor.GetProperty<int>(Actor::Property::ID);
191 moved = std::move(actor);
192 DALI_TEST_CHECK(moved);
193 DALI_TEST_EQUALS(id, moved.GetProperty<int>(Actor::Property::ID), TEST_LOCATION);
194 DALI_TEST_CHECK(!actor);
199 int UtcDaliCameraActorNewP(void)
201 TestApplication application;
202 tet_infoline("Testing Dali::CameraActor::New (P)");
204 CameraActor actor = CameraActor::New();
206 DALI_TEST_CHECK(actor);
210 DALI_TEST_CHECK(!actor);
214 int UtcDaliCameraActorNewDefaultPerspectiveProjection(void)
216 TestApplication application;
217 tet_infoline("Test the perspective projection of a camera actor is set appropriately when not passing in a size");
219 CameraActor actor = CameraActor::New();
220 DALI_TEST_CHECK(actor);
222 // All the properties should still be the default values
223 // Defaults taken from scene-graph-camera.cpp
224 DALI_TEST_EQUALS(480.0f / 800.0f, actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
225 DALI_TEST_EQUALS(45.0f * (Math::PI / 180.0f), actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
226 DALI_TEST_EQUALS(800.0f, actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
227 DALI_TEST_EQUALS(3.0f * 800.0f, actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
228 DALI_TEST_EQUALS(400.0f, actor.GetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
229 DALI_TEST_EQUALS(0.0f, actor.GetProperty(Actor::Property::POSITION_Z).Get<float>(), TEST_LOCATION);
230 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
232 // Add it to the stage, then the values should be updated to reflect a 480.0f by 800.0f scene (default stage size)
233 application.GetScene().Add(actor);
235 DALI_TEST_EQUALS(0.6f, actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
236 DALI_TEST_EQUALS(0.489957f, actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
237 DALI_TEST_EQUALS(800.0f, actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
238 DALI_TEST_EQUALS(4895.0f, actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
239 DALI_TEST_EQUALS(400.0f, actor.GetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
240 DALI_TEST_EQUALS(1600.0f, actor.GetProperty(Actor::Property::POSITION_Z).Get<float>(), TEST_LOCATION);
241 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
243 // Ensure the values stay the same after update/render
244 application.SendNotification();
245 application.Render();
247 DALI_TEST_EQUALS(0.6f, actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
248 DALI_TEST_EQUALS(0.489957f, actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
249 DALI_TEST_EQUALS(800.0f, actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
250 DALI_TEST_EQUALS(4895.0f, actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
251 DALI_TEST_EQUALS(400.0f, actor.GetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
252 DALI_TEST_EQUALS(1600.0f, actor.GetProperty(Actor::Property::POSITION_Z).Get<float>(), TEST_LOCATION);
253 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
258 // Note: No negative test for UtcDaliCameraActorNew.
260 int UtcDaliCameraActorDownCastP(void)
262 TestApplication application;
263 tet_infoline("Testing Dali::CameraActor::DownCast (P)");
265 CameraActor camera = CameraActor::New();
266 Actor anActor = Actor::New();
269 Actor child = anActor.GetChildAt(0);
270 CameraActor cameraActor = CameraActor::DownCast(child);
271 DALI_TEST_CHECK(cameraActor);
274 DALI_TEST_CHECK(!cameraActor);
276 cameraActor = DownCast<CameraActor>(child);
277 DALI_TEST_CHECK(cameraActor);
281 int UtcDaliCameraActorDownCastN(void)
283 TestApplication application;
284 tet_infoline("Testing Dali::CameraActor::DownCast (N)");
286 Actor actor1 = Actor::New();
287 Actor anActor = Actor::New();
290 Actor child = anActor.GetChildAt(0);
291 CameraActor cameraActor = CameraActor::DownCast(child);
292 DALI_TEST_CHECK(!cameraActor);
294 Actor unInitialzedActor;
295 cameraActor = CameraActor::DownCast(unInitialzedActor);
296 DALI_TEST_CHECK(!cameraActor);
298 cameraActor = DownCast<CameraActor>(unInitialzedActor);
299 DALI_TEST_CHECK(!cameraActor);
303 // Note: SetType and GetType are tested within the same test cases.
305 int UtcDaliCameraActorSetGetTypeP(void)
307 TestApplication application;
308 tet_infoline("Testing Dali::CameraActor GetType (P)");
310 CameraActor actor = CameraActor::New();
311 DALI_TEST_EQUALS(actor.GetType(), Dali::Camera::FREE_LOOK, TEST_LOCATION);
313 actor.SetType(Dali::Camera::LOOK_AT_TARGET);
314 DALI_TEST_EQUALS(actor.GetType(), Dali::Camera::LOOK_AT_TARGET, TEST_LOCATION);
316 Dali::Camera::Type cameraType = actor.GetProperty<Dali::Camera::Type>(CameraActor::Property::TYPE);
317 Dali::Camera::Type currentCameraType = actor.GetCurrentProperty<Dali::Camera::Type>(CameraActor::Property::TYPE);
318 DALI_TEST_EQUALS(Camera::LOOK_AT_TARGET, cameraType, TEST_LOCATION);
319 DALI_TEST_EQUALS(Camera::LOOK_AT_TARGET, currentCameraType, TEST_LOCATION);
323 int UtcDaliCameraActorSetGetTypeN(void)
325 TestApplication application;
326 tet_infoline("Testing Dali::CameraActor GetType (N)");
330 Dali::Camera::Type cameraType = Dali::Camera::FREE_LOOK;
333 cameraType = actor.GetType();
335 catch(Dali::DaliException& e)
337 DALI_TEST_PRINT_ASSERT(e);
338 DALI_TEST_ASSERT(e, "camera", TEST_LOCATION);
341 const CameraActor aConstActor;
345 cameraType = aConstActor.GetType();
347 catch(Dali::DaliException& e)
349 DALI_TEST_PRINT_ASSERT(e);
350 DALI_TEST_ASSERT(e, "camera", TEST_LOCATION);
353 DALI_TEST_EQUALS(cameraType, Dali::Camera::FREE_LOOK, TEST_LOCATION);
357 int UtcDaliCameraActorSetFieldOfViewP(void)
359 TestApplication application;
360 tet_infoline("Testing Dali::CameraActor Set Field of view (P)");
362 CameraActor defaultCamera = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
363 const float defaultFieldOfView = defaultCamera.GetFieldOfView();
365 CameraActor actor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
366 DALI_TEST_EQUALS(actor.GetFieldOfView(), defaultFieldOfView, TEST_LOCATION);
368 float fieldOfView = Math::PI / 3.0f;
369 actor.SetFieldOfView(fieldOfView);
370 DALI_TEST_EQUALS(actor.GetFieldOfView(), fieldOfView, TEST_LOCATION);
373 actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get(value);
374 DALI_TEST_EQUALS(fieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
378 int UtcDaliCameraActorSetFieldOfViewN(void)
380 TestApplication application;
381 tet_infoline("Testing Dali::CameraActor Set Field of view (N)");
383 CameraActor defaultCamera = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
384 const float defaultFieldOfView = defaultCamera.GetFieldOfView();
386 CameraActor actor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
387 DALI_TEST_EQUALS(actor.GetFieldOfView(), defaultFieldOfView, TEST_LOCATION);
389 float fieldOfView = Math::PI / 3.0f;
390 actor.SetFieldOfView(fieldOfView);
391 DALI_TEST_EQUALS(actor.GetFieldOfView(), fieldOfView, TEST_LOCATION);
394 actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get(value);
395 DALI_TEST_EQUALS(fieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
399 int UtcDaliCameraActorGetFieldOfViewP(void)
401 TestApplication application;
402 tet_infoline("Testing Dali::CameraActor Get Field of view (P)");
403 const Vector2 size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT);
405 CameraActor defaultCamera = CameraActor::New(size);
407 const float cameraZ = 2.0f * std::max(size.width, size.height);
408 const float expectedFieldOfView = 2.0f * std::atan(size.height * 0.5f / cameraZ);
410 CameraActor actor = CameraActor::New(size);
411 DALI_TEST_EQUALS(actor.GetFieldOfView(), expectedFieldOfView, TEST_LOCATION);
414 actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get(value);
415 DALI_TEST_EQUALS(expectedFieldOfView, value, FLOAT_EPSILON, TEST_LOCATION);
419 int UtcDaliCameraActorGetFieldOfViewN(void)
421 TestApplication application;
422 tet_infoline("Testing Dali::CameraActor Get Field of view (N)");
424 CameraActor defaultCamera = CameraActor::New();
426 bool asserted = true;
429 defaultCamera.GetFieldOfView();
431 catch(Dali::DaliException& e)
433 DALI_TEST_PRINT_ASSERT(e);
434 DALI_TEST_ASSERT(e, "camera && \"Camera handle is empty\"", TEST_LOCATION);
437 DALI_TEST_CHECK(asserted);
442 int UtcDaliCameraActorSetAspectRatioP(void)
444 TestApplication application;
445 tet_infoline("Testing Dali::CameraActor Set Aspect Ratio (P)");
447 CameraActor actor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
448 DALI_TEST_EQUALS(actor.GetAspectRatio(), static_cast<float>(TestApplication::DEFAULT_SURFACE_WIDTH) / static_cast<float>(TestApplication::DEFAULT_SURFACE_HEIGHT), TEST_LOCATION);
450 // Set an initial value to confirm a further set changes it.
451 float aspect = 4.0f / 3.0f;
452 actor.SetAspectRatio(aspect);
453 DALI_TEST_EQUALS(actor.GetAspectRatio(), aspect, TEST_LOCATION);
455 aspect = 16.0f / 9.0f;
456 actor.SetAspectRatio(aspect);
457 DALI_TEST_EQUALS(actor.GetAspectRatio(), aspect, TEST_LOCATION);
462 int UtcDaliCameraActorSetAspectRatioN(void)
464 TestApplication application;
465 tet_infoline("Testing Dali::CameraActor Set Aspect Ratio (N)");
469 bool asserted = true;
472 actor.SetAspectRatio(16.0f / 9.0f);
474 catch(Dali::DaliException& e)
476 DALI_TEST_PRINT_ASSERT(e);
477 DALI_TEST_ASSERT(e, "camera && \"Camera handle is empty\"", TEST_LOCATION);
480 DALI_TEST_CHECK(asserted);
485 int UtcDaliCameraActorGetAspectRatioP(void)
487 TestApplication application;
488 tet_infoline("Testing Dali::CameraActor Get Aspect Ratio");
490 CameraActor actor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
491 float defaultAspect = static_cast<float>(TestApplication::DEFAULT_SURFACE_WIDTH) / static_cast<float>(TestApplication::DEFAULT_SURFACE_HEIGHT);
493 DALI_TEST_EQUALS(actor.GetAspectRatio(), defaultAspect, TEST_LOCATION);
496 actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
497 DALI_TEST_EQUALS(defaultAspect, value, FLOAT_EPSILON, TEST_LOCATION);
502 int UtcDaliCameraActorGetAspectRatioN(void)
504 TestApplication application;
505 tet_infoline("Testing Dali::CameraActor Get Aspect Ratio (N)");
509 bool asserted = true;
512 actor.GetAspectRatio();
514 catch(Dali::DaliException& e)
516 DALI_TEST_PRINT_ASSERT(e);
517 DALI_TEST_ASSERT(e, "camera && \"Camera handle is empty\"", TEST_LOCATION);
521 DALI_TEST_CHECK(asserted);
526 int UtcDaliCameraActorSetNearClippingPlaneP(void)
528 TestApplication application;
529 tet_infoline("Testing Dali::CameraActor Set Near clipping plane (P)");
531 CameraActor actor = CameraActor::New();
533 // Set a value so we are not relying on a particular default for this test case.
534 actor.SetNearClippingPlane(200.0f);
535 DALI_TEST_EQUALS(actor.GetNearClippingPlane(), 200.0f, TEST_LOCATION);
537 actor.SetNearClippingPlane(400.0f);
538 DALI_TEST_EQUALS(actor.GetNearClippingPlane(), 400.0f, TEST_LOCATION);
540 // Check setting the property.
541 actor.SetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE, Property::Value(300.0f));
542 DALI_TEST_EQUALS(actor.GetNearClippingPlane(), 300.0f, FLOAT_EPSILON, TEST_LOCATION);
546 int UtcDaliCameraActorSetNearClippingPlaneN(void)
548 TestApplication application;
549 tet_infoline("Testing Dali::CameraActor Set Near clipping plane (N)");
553 bool asserted = true;
556 actor.SetNearClippingPlane(200.0f);
558 catch(Dali::DaliException& e)
560 DALI_TEST_PRINT_ASSERT(e);
561 DALI_TEST_ASSERT(e, "camera && \"Camera handle is empty\"", TEST_LOCATION);
565 DALI_TEST_CHECK(asserted);
570 int UtcDaliCameraActorGetNearClippingPlaneP(void)
572 TestApplication application;
573 tet_infoline("Testing Dali::CameraActor Get Near clipping plane (P)");
575 // Check the default value.
576 CameraActor actor = CameraActor::New();
577 float defaultValue = 800.0f;
578 DALI_TEST_EQUALS(actor.GetNearClippingPlane(), defaultValue, TEST_LOCATION);
580 // Check getting the property.
582 actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
583 DALI_TEST_EQUALS(defaultValue, value, FLOAT_EPSILON, TEST_LOCATION);
587 int UtcDaliCameraActorGetNearClippingPlaneN(void)
589 TestApplication application;
590 tet_infoline("Testing Dali::CameraActor Get Near clipping plane (N)");
593 bool asserted = true;
596 actor.GetNearClippingPlane();
598 catch(Dali::DaliException& e)
600 DALI_TEST_PRINT_ASSERT(e);
601 DALI_TEST_ASSERT(e, "camera && \"Camera handle is empty\"", TEST_LOCATION);
605 DALI_TEST_CHECK(asserted);
610 int UtcDaliCameraActorSetFarClippingPlaneP(void)
612 TestApplication application;
613 tet_infoline("Testing Dali::CameraActor Set Far clipping plane (P)");
615 CameraActor actor = CameraActor::New();
617 // Set a value so we are not relying on a particular default for this test case.
618 actor.SetFarClippingPlane(2000.0f);
619 DALI_TEST_EQUALS(actor.GetFarClippingPlane(), 2000.0f, TEST_LOCATION);
621 actor.SetFarClippingPlane(4000.0f);
622 DALI_TEST_EQUALS(actor.GetFarClippingPlane(), 4000.0f, TEST_LOCATION);
624 // Check setting the property.
625 actor.SetProperty(CameraActor::Property::FAR_PLANE_DISTANCE, 2000.0f);
626 DALI_TEST_EQUALS(actor.GetFarClippingPlane(), 2000.0f, FLOAT_EPSILON, TEST_LOCATION);
630 int UtcDaliCameraActorSetFarClippingPlaneN(void)
632 TestApplication application;
633 tet_infoline("Testing Dali::CameraActor Set Far clipping plane (N)");
637 bool asserted = true;
640 actor.SetFarClippingPlane(2000.0f);
642 catch(Dali::DaliException& e)
644 DALI_TEST_PRINT_ASSERT(e);
645 DALI_TEST_ASSERT(e, "camera && \"Camera handle is empty\"", TEST_LOCATION);
649 DALI_TEST_CHECK(asserted);
654 int UtcDaliCameraActorGetFarClippingPlaneP(void)
656 TestApplication application;
657 tet_infoline("Testing Dali::CameraActor Get Far clipping plane (P)");
659 CameraActor actor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
660 float defaultValue = 800.0f + (0xFFFF >> 4);
661 DALI_TEST_EQUALS(actor.GetFarClippingPlane(), defaultValue, TEST_LOCATION);
663 // Check getting the property.
665 actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(value);
666 DALI_TEST_EQUALS(defaultValue, value, FLOAT_EPSILON, TEST_LOCATION);
670 int UtcDaliCameraActorGetFarClippingPlaneN(void)
672 TestApplication application;
673 tet_infoline("Testing Dali::CameraActor Get Far clipping plane (N)");
677 bool asserted = true;
680 actor.GetFarClippingPlane();
682 catch(Dali::DaliException& e)
684 DALI_TEST_PRINT_ASSERT(e);
685 DALI_TEST_ASSERT(e, "camera && \"Camera handle is empty\"", TEST_LOCATION);
689 DALI_TEST_CHECK(asserted);
694 int UtcDaliCameraActorSetTargetPositionP(void)
696 TestApplication application;
697 tet_infoline("Testing Dali::CameraActor Set Target Position (P)");
699 CameraActor actor = CameraActor::New();
701 Vector3 target1(10.0f, 20.0f, 30.0f);
702 Vector3 target2(15.0f, 25.0f, 35.0f);
704 // Set a value so we are not relying on a particular default for this test case.
705 actor.SetTargetPosition(target1);
706 DALI_TEST_EQUALS(actor.GetTargetPosition(), target1, TEST_LOCATION);
708 actor.SetTargetPosition(target2);
709 DALI_TEST_EQUALS(actor.GetTargetPosition(), target2, TEST_LOCATION);
711 // Check setting the property.
712 actor.SetProperty(CameraActor::Property::TARGET_POSITION, target1);
713 DALI_TEST_EQUALS(actor.GetTargetPosition(), target1, FLOAT_EPSILON, TEST_LOCATION);
717 int UtcDaliCameraActorSetTargetPositionN(void)
719 TestApplication application;
720 tet_infoline("Testing Dali::CameraActor Set Target Position (N)");
724 bool asserted = true;
727 actor.SetTargetPosition(Vector3(10.0f, 20.0f, 30.0f));
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 UtcDaliCameraActorGetTargetPositionP(void)
742 TestApplication application;
743 tet_infoline("Testing Dali::CameraActor Get Target Position (P)");
745 CameraActor actor = CameraActor::New();
746 Vector3 defaultValue(Vector3::ZERO);
747 DALI_TEST_EQUALS(actor.GetTargetPosition(), defaultValue, TEST_LOCATION);
749 // Check getting the property.
751 actor.GetProperty(CameraActor::Property::TARGET_POSITION).Get(value);
752 DALI_TEST_EQUALS(defaultValue, value, FLOAT_EPSILON, TEST_LOCATION);
756 int UtcDaliCameraActorGetTargetPositionN(void)
758 TestApplication application;
759 tet_infoline("Testing Dali::CameraActor Get Target Position (N)");
763 bool asserted = true;
766 actor.GetTargetPosition();
768 catch(Dali::DaliException& e)
770 DALI_TEST_PRINT_ASSERT(e);
771 DALI_TEST_ASSERT(e, "camera && \"Camera handle is empty\"", TEST_LOCATION);
774 DALI_TEST_CHECK(asserted);
779 int UtcDaliCameraActorSetInvertYAxisP(void)
781 TestApplication application;
782 tet_infoline("Testing Dali::CameraActor Set InvertYAxis (P)");
784 CameraActor actor = CameraActor::New();
786 // Set a value so we are not relying on a particular default for this test case.
787 actor.SetInvertYAxis(false);
788 DALI_TEST_EQUALS(actor.GetInvertYAxis(), false, TEST_LOCATION);
790 actor.SetInvertYAxis(true);
791 DALI_TEST_EQUALS(actor.GetInvertYAxis(), true, TEST_LOCATION);
793 actor.SetProperty(CameraActor::Property::INVERT_Y_AXIS, false);
794 DALI_TEST_EQUALS(actor.GetInvertYAxis(), false, TEST_LOCATION);
798 int UtcDaliCameraActorSetInvertYAxisN(void)
800 TestApplication application;
801 tet_infoline("Testing Dali::CameraActor Set InvertYAxis (N)");
805 bool asserted = true;
808 actor.SetInvertYAxis(false);
810 catch(Dali::DaliException& e)
812 DALI_TEST_PRINT_ASSERT(e);
813 DALI_TEST_ASSERT(e, "camera && \"Camera handle is empty\"", TEST_LOCATION);
816 DALI_TEST_CHECK(asserted);
820 int UtcDaliCameraActorGetInvertYAxisP(void)
822 TestApplication application;
823 tet_infoline("Testing Dali::CameraActor Get InvertYAxis (P)");
825 // Check the default value.
826 CameraActor actor = CameraActor::New();
827 DALI_TEST_EQUALS(actor.GetInvertYAxis(), false, TEST_LOCATION);
829 // Check getting the property.
831 actor.GetProperty(CameraActor::Property::INVERT_Y_AXIS).Get(bValue);
832 DALI_TEST_EQUALS(false, bValue, TEST_LOCATION);
836 int UtcDaliCameraActorGetInvertYAxisN(void)
838 TestApplication application;
839 tet_infoline("Testing Dali::CameraActor Get InvertYAxis (N)");
843 bool asserted = true;
846 actor.GetInvertYAxis();
848 catch(Dali::DaliException& e)
850 DALI_TEST_PRINT_ASSERT(e);
851 DALI_TEST_ASSERT(e, "camera && \"Camera handle is empty\"", TEST_LOCATION);
854 DALI_TEST_CHECK(asserted);
858 int UtcDaliCameraActorSetGetOthographicSizeP(void)
860 TestApplication application;
861 tet_infoline("Testing Dali::CameraActor Set Orthographic Size (P)");
863 CameraActor actor = CameraActor::New(Size(TestApplication::DEFAULT_SURFACE_WIDTH, TestApplication::DEFAULT_SURFACE_HEIGHT));
864 actor.SetProjectionMode(Dali::Camera::ORTHOGRAPHIC_PROJECTION);
866 // Get default orthographic size by inputed size
867 DALI_TEST_EQUALS(actor.GetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get<float>(), static_cast<float>(TestApplication::DEFAULT_SURFACE_HEIGHT) * 0.5f, TEST_LOCATION);
871 // Set an initial value to confirm a further set changes it.
873 actor.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, size);
876 DALI_TEST_CHECK(actor.GetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get(value));
877 DALI_TEST_EQUALS(value, size, TEST_LOCATION);
880 actor.SetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, size);
883 DALI_TEST_CHECK(actor.GetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get(value));
884 DALI_TEST_EQUALS(value, size, TEST_LOCATION);
886 actor.SetProperty(DevelCameraActor::Property::PROJECTION_DIRECTION, DevelCameraActor::ProjectionDirection::HORIZONTAL);
889 actor.SetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, size);
892 DALI_TEST_CHECK(actor.GetProperty(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get(value));
893 DALI_TEST_EQUALS(value, size, TEST_LOCATION);
898 int UtcDaliCameraActorSetPerspectiveProjectionP(void)
900 TestApplication application;
901 tet_infoline("Testing Dali::CameraActor::SetPerspectiveProjection (P)");
903 CameraActor actor = CameraActor::New();
904 actor.SetPerspectiveProjection(Size(100.f, 150.f));
906 DALI_TEST_CHECK(actor);
909 actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
910 DALI_TEST_EQUALS(0.666666f, value, FLOAT_EPSILON, TEST_LOCATION);
911 actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get(value);
912 DALI_TEST_EQUALS(0.489957f, value, FLOAT_EPSILON, TEST_LOCATION);
913 actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
914 DALI_TEST_EQUALS(150.f, value, FLOAT_EPSILON, TEST_LOCATION);
915 actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(value);
916 DALI_TEST_EQUALS(4245.f, value, FLOAT_EPSILON, TEST_LOCATION);
918 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
920 // Ensure these values persist after adding to the stage and an update/render pass
921 application.GetScene().Add(actor);
922 application.SendNotification();
923 application.Render();
925 actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
926 DALI_TEST_EQUALS(0.666666f, value, FLOAT_EPSILON, TEST_LOCATION);
927 actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get(value);
928 DALI_TEST_EQUALS(0.489957f, value, FLOAT_EPSILON, TEST_LOCATION);
929 actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
930 DALI_TEST_EQUALS(150.f, value, FLOAT_EPSILON, TEST_LOCATION);
931 actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(value);
932 DALI_TEST_EQUALS(4245.f, value, FLOAT_EPSILON, TEST_LOCATION);
934 // Call method with a ZERO size, this should reset the perspective projection using the size of the scene we've been added to
935 actor.SetPerspectiveProjection(Vector2::ZERO);
937 DALI_TEST_EQUALS(0.6f, actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
938 DALI_TEST_EQUALS(0.489957f, actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
939 DALI_TEST_EQUALS(800.0f, actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
940 DALI_TEST_EQUALS(4895.0f, actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get<float>(), FLOAT_EPSILON, TEST_LOCATION);
941 DALI_TEST_EQUALS(1600.0f, actor.GetProperty(Actor::Property::POSITION_Z).Get<float>(), TEST_LOCATION);
942 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
947 int UtcDaliCameraActorSetPerspectiveProjectionN(void)
949 TestApplication application;
950 tet_infoline("Testing Dali::CameraActor::SetPerspectiveProjection (N)");
952 CameraActor actor = CameraActor::New();
954 // Check that setting perspective projection without a size does not do anything.
955 actor.SetPerspectiveProjection(Size::ZERO);
957 // So the default values should be the same as defined in CameraActor
958 float nearClippingPlane = 800.0f;
959 float farClippingPlane = nearClippingPlane + 2.0f * nearClippingPlane;
961 DALI_TEST_EQUALS(nearClippingPlane, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
962 DALI_TEST_EQUALS(farClippingPlane, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
963 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
968 int UtcDaliCameraActorSetOrthographicProjectionP1(void)
970 TestApplication application;
971 tet_infoline("Testing Dali::CameraActor::SetOrthographicProjection (P,1)");
973 CameraActor actor = CameraActor::New(Size(1080.0f, 1920.0f));
974 DALI_TEST_CHECK(actor);
976 application.GetScene().Add(actor);
978 actor.SetOrthographicProjection(Size(1080.0f, 1920.0f));
980 application.SendNotification();
981 application.Render(0);
982 application.Render();
983 application.SendNotification();
985 float defaultAspectRatio;
986 float defaultNearPlaneDistance;
987 float defaultFarPlaneDistance;
988 actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(defaultAspectRatio);
989 actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(defaultNearPlaneDistance);
990 actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(defaultFarPlaneDistance);
991 Vector3 defaultPos = actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION);
993 auto TestOrthographicPlaneDistance = [&](float width, float height, float expectOrthographicSize) {
994 actor.SetOrthographicProjection(Size(width, height));
996 DALI_TEST_EQUALS(expectOrthographicSize, actor.GetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE).Get<float>(), TEST_LOCATION);
998 application.SendNotification();
999 application.Render(0);
1000 application.Render();
1001 application.SendNotification();
1004 actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
1005 DALI_TEST_EQUALS(defaultAspectRatio, value, FLOAT_EPSILON, TEST_LOCATION);
1006 actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
1007 DALI_TEST_EQUALS(defaultNearPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION);
1008 actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(value);
1009 DALI_TEST_EQUALS(defaultFarPlaneDistance, value, FLOAT_EPSILON, TEST_LOCATION);
1011 actor.GetProperty(CameraActor::Property::LEFT_PLANE_DISTANCE).Get(value);
1012 DALI_TEST_EQUALS(-540.0f, value, FLOAT_EPSILON, TEST_LOCATION);
1013 actor.GetProperty(CameraActor::Property::RIGHT_PLANE_DISTANCE).Get(value);
1014 DALI_TEST_EQUALS(540.0f, value, FLOAT_EPSILON, TEST_LOCATION);
1015 actor.GetProperty(CameraActor::Property::TOP_PLANE_DISTANCE).Get(value);
1016 DALI_TEST_EQUALS(960.0f, value, FLOAT_EPSILON, TEST_LOCATION);
1017 actor.GetProperty(CameraActor::Property::BOTTOM_PLANE_DISTANCE).Get(value);
1018 DALI_TEST_EQUALS(-960.0f, value, FLOAT_EPSILON, TEST_LOCATION);
1020 Vector3 pos = actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION);
1021 DALI_TEST_EQUALS(defaultPos.z, pos.z, 0.001f, TEST_LOCATION);
1023 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
1026 TestOrthographicPlaneDistance(1080.0f, 1920.0f, 960.0f);
1027 // Change projection direction
1028 actor.SetProperty(DevelCameraActor::Property::PROJECTION_DIRECTION, DevelCameraActor::ProjectionDirection::HORIZONTAL);
1029 TestOrthographicPlaneDistance(1080.0f, 1920.0f, 540.0f);
1033 int UtcDaliCameraActorSetOrthographicProjectionN(void)
1035 TestApplication application;
1036 tet_infoline("Testing Dali::CameraActor::SetOrthographicProjection (N)");
1039 bool asserted = true;
1042 actor.GetProjectionMode();
1044 catch(Dali::DaliException& e)
1046 DALI_TEST_PRINT_ASSERT(e);
1047 DALI_TEST_ASSERT(e, "camera && \"Camera handle is empty\"", TEST_LOCATION);
1050 DALI_TEST_CHECK(asserted);
1054 int UtcDaliCameraActorSetProjectionModeP(void)
1056 TestApplication application;
1057 tet_infoline("Testing Dali::CameraActor::SetProjectionModeP (P)");
1059 CameraActor actor = CameraActor::New();
1061 // Check that changing the projection mode alone does not alter other presets.
1062 actor.SetNearClippingPlane(200.0f);
1063 actor.SetFarClippingPlane(400.0f);
1065 actor.SetProjectionMode(Dali::Camera::PERSPECTIVE_PROJECTION);
1067 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
1068 DALI_TEST_EQUALS(actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION);
1069 DALI_TEST_EQUALS(actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION);
1071 actor.SetProjectionMode(Dali::Camera::ORTHOGRAPHIC_PROJECTION);
1073 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
1074 DALI_TEST_EQUALS(actor.GetNearClippingPlane(), 200.0f, FLOAT_EPSILON, TEST_LOCATION);
1075 DALI_TEST_EQUALS(actor.GetFarClippingPlane(), 400.0f, FLOAT_EPSILON, TEST_LOCATION);
1077 // Check setting the property.
1078 Property::Value setValue = Dali::Camera::PERSPECTIVE_PROJECTION;
1079 actor.SetProperty(CameraActor::Property::PROJECTION_MODE, setValue);
1080 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
1084 int UtcDaliCameraActorSetProjectionModeN(void)
1086 TestApplication application;
1087 tet_infoline("Testing Dali::CameraActor::SetProjectionModeP (N)");
1091 bool asserted = true;
1094 actor.SetProjectionMode(Dali::Camera::PERSPECTIVE_PROJECTION);
1096 catch(Dali::DaliException& e)
1098 DALI_TEST_PRINT_ASSERT(e);
1099 DALI_TEST_ASSERT(e, "camera && \"Camera handle is empty\"", TEST_LOCATION);
1102 DALI_TEST_CHECK(asserted);
1106 int UtcDaliCameraActorGetProjectionModeP(void)
1108 TestApplication application;
1109 tet_infoline("Testing Dali::CameraActor::GetPerspectiveProjection (P)");
1111 CameraActor actor = CameraActor::New();
1113 actor.SetOrthographicProjection(Size::ONE);
1114 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
1116 actor.SetPerspectiveProjection(Size(100.f, 150.f));
1117 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
1119 // Check getting the property.
1120 Dali::Camera::ProjectionMode projectionMode = actor.GetProperty<Dali::Camera::ProjectionMode>(CameraActor::Property::PROJECTION_MODE);
1121 DALI_TEST_EQUALS(projectionMode, Dali::Camera::PERSPECTIVE_PROJECTION, TEST_LOCATION);
1125 int UtcDaliCameraActorGetProjectionModeN(void)
1127 TestApplication application;
1128 tet_infoline("Testing Dali::CameraActor::GetProjectionMode (N)");
1132 bool asserted = true;
1135 actor.GetProjectionMode();
1137 catch(Dali::DaliException& e)
1139 DALI_TEST_PRINT_ASSERT(e);
1140 DALI_TEST_ASSERT(e, "camera && \"Camera handle is empty\"", TEST_LOCATION);
1143 DALI_TEST_CHECK(asserted);
1147 int UtcDaliCameraActorSetCameraOffScene(void)
1149 TestApplication application;
1150 tet_infoline("Testing Dali::CameraActor::SetCamera()");
1152 CameraActor actor = CameraActor::New();
1154 actor.SetType(Camera::FREE_LOOK);
1155 actor.SetFieldOfView(TEST_FIELD_OF_VIEW);
1156 actor.SetAspectRatio(TEST_ASPECT_RATIO);
1157 actor.SetNearClippingPlane(TEST_NEAR_PLANE_DISTANCE);
1158 actor.SetFarClippingPlane(TEST_FAR_PLANE_DISTANCE);
1159 actor.SetProjectionMode(Camera::PERSPECTIVE_PROJECTION);
1161 actor.SetInvertYAxis(false);
1163 DALI_TEST_EQUALS(TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION); //change to machine epsilon
1164 DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION);
1165 DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
1166 DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
1167 DALI_TEST_EQUALS(Camera::PERSPECTIVE_PROJECTION, actor.GetProjectionMode(), TEST_LOCATION);
1168 DALI_TEST_EQUALS(false, actor.GetInvertYAxis(), TEST_LOCATION);
1172 actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
1173 DALI_TEST_EQUALS(TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION);
1174 actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get(value);
1175 DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION);
1176 actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
1177 DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
1178 actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(value);
1179 DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
1181 Dali::Camera::ProjectionMode projectionMode = actor.GetProperty<Dali::Camera::ProjectionMode>(CameraActor::Property::PROJECTION_MODE);
1182 DALI_TEST_EQUALS(Dali::Camera::PERSPECTIVE_PROJECTION, projectionMode, TEST_LOCATION);
1184 actor.GetProperty(CameraActor::Property::INVERT_Y_AXIS).Get(bValue);
1185 DALI_TEST_EQUALS(false, bValue, TEST_LOCATION);
1189 int UtcDaliCameraActorSetCameraOnScene(void)
1191 TestApplication application;
1192 tet_infoline("Testing Dali::CameraActor::SetCamera()");
1194 CameraActor actor = CameraActor::New();
1195 application.GetScene().Add(actor);
1196 application.Render(0);
1197 application.SendNotification();
1199 actor.SetType(Camera::LOOK_AT_TARGET);
1200 actor.SetFieldOfView(TEST_FIELD_OF_VIEW);
1201 actor.SetAspectRatio(TEST_ASPECT_RATIO);
1202 actor.SetNearClippingPlane(TEST_NEAR_PLANE_DISTANCE);
1203 actor.SetFarClippingPlane(TEST_FAR_PLANE_DISTANCE);
1204 actor.SetInvertYAxis(false);
1206 DALI_TEST_EQUALS(false, actor.GetInvertYAxis(), TEST_LOCATION);
1208 // Will need 2 frames to ensure both buffers are set to same values:
1209 application.Render();
1210 application.SendNotification();
1211 application.Render();
1212 application.SendNotification();
1214 DALI_TEST_EQUALS(TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION);
1215 DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION);
1216 DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
1217 DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
1218 DALI_TEST_EQUALS(false, actor.GetInvertYAxis(), TEST_LOCATION);
1220 Dali::Camera::Type cameraType = actor.GetProperty<Dali::Camera::Type>(CameraActor::Property::TYPE);
1221 DALI_TEST_EQUALS(cameraType, Camera::LOOK_AT_TARGET, TEST_LOCATION);
1224 actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
1225 DALI_TEST_EQUALS(TEST_ASPECT_RATIO, value, FLOAT_EPSILON, TEST_LOCATION);
1226 actor.GetProperty(CameraActor::Property::FIELD_OF_VIEW).Get(value);
1227 DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, value, FLOAT_EPSILON, TEST_LOCATION);
1228 actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
1229 DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
1230 actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(value);
1231 DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, value, FLOAT_EPSILON, TEST_LOCATION);
1234 actor.GetProperty(CameraActor::Property::INVERT_Y_AXIS).Get(bValue);
1235 DALI_TEST_EQUALS(false, bValue, TEST_LOCATION);
1239 int UtcDaliCameraActorGetCamera(void)
1241 TestApplication application;
1242 tet_infoline("Testing Dali::CameraActor::GetCamera()");
1244 CameraActor actor = CameraActor::New();
1246 actor.SetAspectRatio(TEST_ASPECT_RATIO);
1248 DALI_TEST_EQUALS(actor.GetAspectRatio(), TEST_ASPECT_RATIO, FLOAT_EPSILON, TEST_LOCATION);
1250 actor.SetProperty(CameraActor::Property::TYPE, Camera::FREE_LOOK);
1251 actor.SetProperty(CameraActor::Property::ASPECT_RATIO, TEST_ASPECT_RATIO);
1252 actor.SetProperty(CameraActor::Property::FIELD_OF_VIEW, TEST_FIELD_OF_VIEW);
1253 actor.SetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE, TEST_NEAR_PLANE_DISTANCE);
1254 actor.SetProperty(CameraActor::Property::FAR_PLANE_DISTANCE, TEST_FAR_PLANE_DISTANCE);
1256 DALI_TEST_EQUALS(Camera::FREE_LOOK, actor.GetType(), TEST_LOCATION);
1257 DALI_TEST_EQUALS(TEST_ASPECT_RATIO, actor.GetAspectRatio(), FLOAT_EPSILON, TEST_LOCATION);
1258 DALI_TEST_EQUALS(TEST_FIELD_OF_VIEW, actor.GetFieldOfView(), FLOAT_EPSILON, TEST_LOCATION);
1259 DALI_TEST_EQUALS(TEST_NEAR_PLANE_DISTANCE, actor.GetNearClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
1260 DALI_TEST_EQUALS(TEST_FAR_PLANE_DISTANCE, actor.GetFarClippingPlane(), FLOAT_EPSILON, TEST_LOCATION);
1264 int UtcDaliCameraActorDefaultProperties(void)
1266 TestApplication application;
1267 tet_infoline("Testing Dali::CameraActor DefaultProperties");
1269 CameraActor actor = CameraActor::New();
1270 Integration::Scene stage = application.GetScene();
1272 stage.GetRenderTaskList().GetTask(0).SetCameraActor(actor);
1274 actor.SetAspectRatio(TEST_ASPECT_RATIO);
1275 application.GetScene().Add(actor);
1276 application.Render(0);
1277 application.SendNotification();
1279 actor.GetProperty(CameraActor::Property::INVERT_Y_AXIS).Get(bValue);
1280 DALI_TEST_EQUALS(false, bValue, TEST_LOCATION);
1282 std::vector<Property::Index> indices;
1283 indices.push_back(CameraActor::Property::TYPE);
1284 indices.push_back(CameraActor::Property::PROJECTION_MODE);
1285 indices.push_back(CameraActor::Property::FIELD_OF_VIEW);
1286 indices.push_back(CameraActor::Property::ASPECT_RATIO);
1287 indices.push_back(CameraActor::Property::NEAR_PLANE_DISTANCE);
1288 indices.push_back(CameraActor::Property::FAR_PLANE_DISTANCE);
1289 indices.push_back(CameraActor::Property::LEFT_PLANE_DISTANCE);
1290 indices.push_back(CameraActor::Property::RIGHT_PLANE_DISTANCE);
1291 indices.push_back(CameraActor::Property::TOP_PLANE_DISTANCE);
1292 indices.push_back(CameraActor::Property::BOTTOM_PLANE_DISTANCE);
1293 indices.push_back(CameraActor::Property::TARGET_POSITION);
1294 indices.push_back(CameraActor::Property::PROJECTION_MATRIX);
1295 indices.push_back(CameraActor::Property::VIEW_MATRIX);
1296 indices.push_back(CameraActor::Property::INVERT_Y_AXIS);
1297 indices.push_back(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE);
1298 indices.push_back(DevelCameraActor::Property::PROJECTION_DIRECTION);
1300 DALI_TEST_CHECK(actor.GetPropertyCount() == (Actor::New().GetPropertyCount() + indices.size()));
1302 for(std::vector<Property::Index>::iterator iter = indices.begin(); iter != indices.end(); ++iter)
1304 DALI_TEST_EQUALS(*iter, actor.GetPropertyIndex(actor.GetPropertyName(*iter)), TEST_LOCATION);
1306 if(*iter == CameraActor::Property::FIELD_OF_VIEW || *iter == CameraActor::Property::ASPECT_RATIO || *iter == DevelCameraActor::Property::ORTHOGRAPHIC_SIZE)
1308 DALI_TEST_CHECK(actor.IsPropertyAnimatable(*iter));
1312 DALI_TEST_CHECK(!actor.IsPropertyAnimatable(*iter));
1315 if((*iter == CameraActor::Property::LEFT_PLANE_DISTANCE) ||
1316 (*iter == CameraActor::Property::RIGHT_PLANE_DISTANCE) ||
1317 (*iter == CameraActor::Property::TOP_PLANE_DISTANCE) ||
1318 (*iter == CameraActor::Property::BOTTOM_PLANE_DISTANCE) ||
1319 (*iter == CameraActor::Property::PROJECTION_MATRIX) ||
1320 (*iter == CameraActor::Property::VIEW_MATRIX))
1322 DALI_TEST_CHECK(!actor.IsPropertyWritable(*iter));
1326 DALI_TEST_CHECK(actor.IsPropertyWritable(*iter));
1329 DALI_TEST_CHECK(actor.GetPropertyType(*iter) == actor.GetPropertyType(*iter)); // just checking call succeeds
1332 // Set/Get one of them.
1333 const float newAspect = TEST_ASPECT_RATIO * 2.0f;
1335 actor.SetProperty(CameraActor::Property::ASPECT_RATIO, Property::Value(newAspect));
1336 application.Render();
1337 application.SendNotification();
1338 application.Render();
1339 application.SendNotification();
1341 DALI_TEST_EQUALS(actor.GetAspectRatio(), newAspect, TEST_LOCATION);
1345 template<typename P1, typename P2, typename P3, typename P4, typename P5, typename P6, typename P7, typename P8>
1346 void TEST_CAMERA_PROPERTY(P1 camera, P2 stringName, P3 type, P4 isWriteable, P5 isAnimateable, P6 isConstraintInput, P7 enumName, P8 LOCATION)
1348 DALI_TEST_EQUALS(camera.GetPropertyName(enumName), stringName, LOCATION);
1349 DALI_TEST_EQUALS(camera.GetPropertyIndex(stringName), static_cast<Property::Index>(enumName), LOCATION);
1350 DALI_TEST_EQUALS(camera.GetPropertyType(enumName), type, LOCATION);
1351 DALI_TEST_EQUALS(camera.IsPropertyWritable(enumName), isWriteable, LOCATION);
1352 DALI_TEST_EQUALS(camera.IsPropertyAnimatable(enumName), isAnimateable, LOCATION);
1353 DALI_TEST_EQUALS(camera.IsPropertyAConstraintInput(enumName), isConstraintInput, LOCATION);
1355 int UtcDaliCameraActorDefaultPropertiesInherited(void)
1357 TestApplication application;
1359 CameraActor actor = CameraActor::New();
1360 Integration::Scene stage = application.GetScene();
1362 stage.GetRenderTaskList().GetTask(0).SetCameraActor(actor);
1364 application.GetScene().Add(actor);
1365 application.Render(0);
1366 application.SendNotification();
1368 const PropertyDetails CAMERA_DEFAULT_PROPERTY[] =
1371 {"parentOrigin", Property::VECTOR3, true, false, true, Dali::Actor::Property::PARENT_ORIGIN},
1372 {"parentOriginX", Property::FLOAT, true, false, true, Dali::Actor::Property::PARENT_ORIGIN_X},
1373 {"parentOriginY", Property::FLOAT, true, false, true, Dali::Actor::Property::PARENT_ORIGIN_Y},
1374 {"parentOriginZ", Property::FLOAT, true, false, true, Dali::Actor::Property::PARENT_ORIGIN_Z},
1375 {"anchorPoint", Property::VECTOR3, true, false, true, Dali::Actor::Property::ANCHOR_POINT},
1376 {"anchorPointX", Property::FLOAT, true, false, true, Dali::Actor::Property::ANCHOR_POINT_X},
1377 {"anchorPointY", Property::FLOAT, true, false, true, Dali::Actor::Property::ANCHOR_POINT_Y},
1378 {"anchorPointZ", Property::FLOAT, true, false, true, Dali::Actor::Property::ANCHOR_POINT_Z},
1379 {"size", Property::VECTOR3, true, true, true, Dali::Actor::Property::SIZE},
1380 {"sizeWidth", Property::FLOAT, true, true, true, Dali::Actor::Property::SIZE_WIDTH},
1381 {"sizeHeight", Property::FLOAT, true, true, true, Dali::Actor::Property::SIZE_HEIGHT},
1382 {"sizeDepth", Property::FLOAT, true, true, true, Dali::Actor::Property::SIZE_DEPTH},
1383 {"position", Property::VECTOR3, true, true, true, Dali::Actor::Property::POSITION},
1384 {"positionX", Property::FLOAT, true, true, true, Dali::Actor::Property::POSITION_X},
1385 {"positionY", Property::FLOAT, true, true, true, Dali::Actor::Property::POSITION_Y},
1386 {"positionZ", Property::FLOAT, true, true, true, Dali::Actor::Property::POSITION_Z},
1387 {"worldPosition", Property::VECTOR3, false, false, true, Dali::Actor::Property::WORLD_POSITION},
1388 {"worldPositionX", Property::FLOAT, false, false, true, Dali::Actor::Property::WORLD_POSITION_X},
1389 {"worldPositionY", Property::FLOAT, false, false, true, Dali::Actor::Property::WORLD_POSITION_Y},
1390 {"worldPositionZ", Property::FLOAT, false, false, true, Dali::Actor::Property::WORLD_POSITION_Z},
1391 {"orientation", Property::ROTATION, true, true, true, Dali::Actor::Property::ORIENTATION},
1392 {"worldOrientation", Property::ROTATION, false, false, true, Dali::Actor::Property::WORLD_ORIENTATION},
1393 {"scale", Property::VECTOR3, true, true, true, Dali::Actor::Property::SCALE},
1394 {"scaleX", Property::FLOAT, true, true, true, Dali::Actor::Property::SCALE_X},
1395 {"scaleY", Property::FLOAT, true, true, true, Dali::Actor::Property::SCALE_Y},
1396 {"scaleZ", Property::FLOAT, true, true, true, Dali::Actor::Property::SCALE_Z},
1397 {"worldScale", Property::VECTOR3, false, false, true, Dali::Actor::Property::WORLD_SCALE},
1398 {"visible", Property::BOOLEAN, true, true, true, Dali::Actor::Property::VISIBLE},
1399 {"color", Property::VECTOR4, true, true, true, Dali::Actor::Property::COLOR},
1400 {"colorRed", Property::FLOAT, true, true, true, Dali::Actor::Property::COLOR_RED},
1401 {"colorGreen", Property::FLOAT, true, true, true, Dali::Actor::Property::COLOR_GREEN},
1402 {"colorBlue", Property::FLOAT, true, true, true, Dali::Actor::Property::COLOR_BLUE},
1403 {"colorAlpha", Property::FLOAT, true, true, true, Dali::Actor::Property::COLOR_ALPHA},
1404 {"worldColor", Property::VECTOR4, false, false, true, Dali::Actor::Property::WORLD_COLOR},
1405 {"worldMatrix", Property::MATRIX, false, false, true, Dali::Actor::Property::WORLD_MATRIX},
1406 {"name", Property::STRING, true, false, false, Dali::Actor::Property::NAME},
1407 {"sensitive", Property::BOOLEAN, true, false, false, Dali::Actor::Property::SENSITIVE},
1408 {"leaveRequired", Property::BOOLEAN, true, false, false, Dali::Actor::Property::LEAVE_REQUIRED},
1409 {"inheritOrientation", Property::BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_ORIENTATION},
1410 {"inheritScale", Property::BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_SCALE},
1411 {"colorMode", Property::INTEGER, true, false, false, Dali::Actor::Property::COLOR_MODE},
1412 {"drawMode", Property::INTEGER, true, false, false, Dali::Actor::Property::DRAW_MODE},
1413 {"sizeModeFactor", Property::VECTOR3, true, false, false, Dali::Actor::Property::SIZE_MODE_FACTOR},
1414 {"widthResizePolicy", Property::STRING, true, false, false, Dali::Actor::Property::WIDTH_RESIZE_POLICY},
1415 {"heightResizePolicy", Property::STRING, true, false, false, Dali::Actor::Property::HEIGHT_RESIZE_POLICY},
1416 {"sizeScalePolicy", Property::INTEGER, true, false, false, Dali::Actor::Property::SIZE_SCALE_POLICY},
1417 {"widthForHeight", Property::BOOLEAN, true, false, false, Dali::Actor::Property::WIDTH_FOR_HEIGHT},
1418 {"heightForWidth", Property::BOOLEAN, true, false, false, Dali::Actor::Property::HEIGHT_FOR_WIDTH},
1419 {"padding", Property::VECTOR4, true, false, false, Dali::Actor::Property::PADDING},
1420 {"minimumSize", Property::VECTOR2, true, false, false, Dali::Actor::Property::MINIMUM_SIZE},
1421 {"maximumSize", Property::VECTOR2, true, false, false, Dali::Actor::Property::MAXIMUM_SIZE},
1422 {"inheritPosition", Property::BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_POSITION},
1423 {"clippingMode", Property::STRING, true, false, false, Dali::Actor::Property::CLIPPING_MODE},
1424 {"layoutDirection", Property::STRING, true, false, false, Dali::Actor::Property::LAYOUT_DIRECTION},
1425 {"inheritLayoutDirection", Property::BOOLEAN, true, false, false, Dali::Actor::Property::INHERIT_LAYOUT_DIRECTION},
1426 {"opacity", Property::FLOAT, true, true, true, Dali::Actor::Property::OPACITY},
1427 {"screenPosition", Property::VECTOR2, false, false, false, Dali::Actor::Property::SCREEN_POSITION},
1428 {"positionUsesAnchorPoint", Property::BOOLEAN, true, false, false, Dali::Actor::Property::POSITION_USES_ANCHOR_POINT},
1429 {"culled", Property::BOOLEAN, false, false, true, Dali::Actor::Property::CULLED},
1430 {"id", Property::INTEGER, false, false, false, Dali::Actor::Property::ID},
1431 {"hierarchyDepth", Property::INTEGER, false, false, false, Dali::Actor::Property::HIERARCHY_DEPTH},
1432 {"isRoot", Property::BOOLEAN, false, false, false, Dali::Actor::Property::IS_ROOT},
1433 {"isLayer", Property::BOOLEAN, false, false, false, Dali::Actor::Property::IS_LAYER},
1434 {"connectedToScene", Property::BOOLEAN, false, false, false, Dali::Actor::Property::CONNECTED_TO_SCENE},
1435 {"keyboardFocusable", Property::BOOLEAN, true, false, false, Dali::Actor::Property::KEYBOARD_FOCUSABLE},
1436 {"siblingOrder", Property::INTEGER, true, false, false, Dali::DevelActor::Property::SIBLING_ORDER},
1438 {"type", Property::INTEGER, true, false, true, Dali::CameraActor::Property::TYPE},
1439 {"projectionMode", Property::INTEGER, true, false, true, Dali::CameraActor::Property::PROJECTION_MODE},
1440 {"fieldOfView", Property::FLOAT, true, true, true, Dali::CameraActor::Property::FIELD_OF_VIEW},
1441 {"aspectRatio", Property::FLOAT, true, true, true, Dali::CameraActor::Property::ASPECT_RATIO},
1442 {"nearPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::NEAR_PLANE_DISTANCE},
1443 {"farPlaneDistance", Property::FLOAT, true, false, true, Dali::CameraActor::Property::FAR_PLANE_DISTANCE},
1444 {"leftPlaneDistance", Property::FLOAT, false, false, true, Dali::CameraActor::Property::LEFT_PLANE_DISTANCE},
1445 {"rightPlaneDistance", Property::FLOAT, false, false, true, Dali::CameraActor::Property::RIGHT_PLANE_DISTANCE},
1446 {"topPlaneDistance", Property::FLOAT, false, false, true, Dali::CameraActor::Property::TOP_PLANE_DISTANCE},
1447 {"bottomPlaneDistance", Property::FLOAT, false, false, true, Dali::CameraActor::Property::BOTTOM_PLANE_DISTANCE},
1448 {"targetPosition", Property::VECTOR3, true, false, true, Dali::CameraActor::Property::TARGET_POSITION},
1449 {"projectionMatrix", Property::MATRIX, false, false, true, Dali::CameraActor::Property::PROJECTION_MATRIX},
1450 {"viewMatrix", Property::MATRIX, false, false, true, Dali::CameraActor::Property::VIEW_MATRIX},
1451 {"invertYAxis", Property::BOOLEAN, true, false, true, Dali::CameraActor::Property::INVERT_Y_AXIS},
1452 {"orthographicSize", Property::FLOAT, true, true, true, Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE},
1453 {"projectionDirection", Property::INTEGER, true, false, true, Dali::DevelCameraActor::Property::PROJECTION_DIRECTION}};
1455 for(uint32_t index = 0; index < (sizeof(CAMERA_DEFAULT_PROPERTY) / sizeof(PropertyDetails)); ++index)
1457 TEST_CAMERA_PROPERTY(actor,
1458 CAMERA_DEFAULT_PROPERTY[index].name,
1459 CAMERA_DEFAULT_PROPERTY[index].type,
1460 CAMERA_DEFAULT_PROPERTY[index].writable,
1461 CAMERA_DEFAULT_PROPERTY[index].animatable,
1462 CAMERA_DEFAULT_PROPERTY[index].constraintInput,
1463 CAMERA_DEFAULT_PROPERTY[index].enumIndex,
1469 int UtcDaliCameraActorModelView(void)
1471 TestApplication application;
1472 tet_infoline("Testing Dali::CameraActor Test view application");
1474 Actor actor = CreateRenderableActor();
1475 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
1476 actor.SetProperty(Actor::Property::POSITION, Vector3(20.0f, 30.0f, 40.0f));
1477 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
1478 application.GetScene().Add(actor);
1480 application.SendNotification();
1481 application.Render(0);
1482 application.Render();
1483 application.SendNotification();
1485 Matrix resultMatrix(true);
1486 resultMatrix.SetTransformComponents(Vector3::ONE, Quaternion::IDENTITY, actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION));
1488 RenderTask task = application.GetScene().GetRenderTaskList().GetTask(0);
1489 CameraActor cameraActor = task.GetCameraActor();
1491 Matrix viewMatrix(false);
1492 cameraActor.GetProperty(CameraActor::Property::VIEW_MATRIX).Get(viewMatrix);
1493 Matrix::Multiply(resultMatrix, resultMatrix, viewMatrix);
1495 DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue("uModelView", resultMatrix));
1499 int UtcDaliCameraActorReadProjectionMatrix(void)
1501 TestApplication application;
1502 tet_infoline("Testing Dali::CameraActor::ReadProjectionMatrix()");
1504 CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
1505 application.SendNotification();
1506 application.Render(0);
1507 application.Render();
1508 application.SendNotification();
1509 Texture image = Texture::New(TextureType::TEXTURE_2D, Pixel::RGBA8888, 4u, 4u);
1510 Actor actor = CreateRenderableActor(image, RENDER_SHADOW_VERTEX_SOURCE, RENDER_SHADOW_FRAGMENT_SOURCE);
1511 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
1512 application.GetScene().Add(actor);
1514 Matrix projectionMatrix;
1517 camera.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
1518 camera.GetProperty(CameraActor::CameraActor::Property::VIEW_MATRIX).Get(viewMatrix);
1520 actor.RegisterProperty(SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME, Matrix::IDENTITY);
1521 actor.RegisterProperty(SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME, Matrix::IDENTITY);
1523 Property::Index projectionMatrixPropertyIndex = actor.GetPropertyIndex(SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME);
1524 Property::Index viewMatrixPropertyIndex = actor.GetPropertyIndex(SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME);
1526 Constraint projectionMatrixConstraint = Constraint::New<Dali::Matrix>(actor, projectionMatrixPropertyIndex, EqualToConstraint());
1527 projectionMatrixConstraint.AddSource(Source(camera, CameraActor::Property::PROJECTION_MATRIX));
1528 Constraint viewMatrixConstraint = Constraint::New<Dali::Matrix>(actor, viewMatrixPropertyIndex, EqualToConstraint());
1529 viewMatrixConstraint.AddSource(Source(camera, CameraActor::Property::VIEW_MATRIX));
1531 projectionMatrixConstraint.Apply();
1532 viewMatrixConstraint.Apply();
1534 application.SendNotification();
1535 application.Render();
1537 // Test effects of Constraint.
1538 DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue(SHADER_LIGHT_CAMERA_PROJECTION_MATRIX_PROPERTY_NAME.c_str(), projectionMatrix));
1540 DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue(SHADER_LIGHT_CAMERA_VIEW_MATRIX_PROPERTY_NAME.c_str(), viewMatrix));
1544 int UtcDaliCameraActorAnimatedProperties01(void)
1546 TestApplication application;
1547 tet_infoline("Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()");
1549 CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
1550 Actor actor = Actor::New();
1551 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
1552 application.GetScene().Add(actor);
1554 Constraint constraint = Constraint::New<Dali::Vector3>(actor, Actor::Property::POSITION, EqualToConstraint());
1555 constraint.AddSource(Source(camera, Actor::Property::POSITION));
1558 camera.SetProperty(Actor::Property::POSITION, Vector3(100.0f, 200.0f, 300.0f));
1559 application.SendNotification();
1560 application.Render();
1562 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector3>(Actor::Property::POSITION), Vector3(100.0f, 200.0f, 300.0f), TEST_LOCATION);
1566 int UtcDaliCameraActorAnimatedProperties02(void)
1568 TestApplication application;
1569 tet_infoline("Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()");
1571 CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
1572 Actor actor = Actor::New();
1573 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
1574 actor.SetProperty(Actor::Property::POSITION, Vector2(0.1f, 0.0f));
1575 application.GetScene().Add(actor);
1577 camera.SetFieldOfView(0.1f);
1578 camera.SetAspectRatio(0.5f);
1579 camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, 200.0f);
1581 Constraint constraintX = Constraint::New<float>(actor, Actor::Property::POSITION_X, EqualToConstraint());
1582 constraintX.AddSource(Source(camera, CameraActor::Property::FIELD_OF_VIEW));
1583 constraintX.Apply();
1585 Constraint constraintY = Constraint::New<float>(actor, Actor::Property::POSITION_Y, EqualToConstraint());
1586 constraintY.AddSource(Source(camera, CameraActor::Property::ASPECT_RATIO));
1587 constraintY.Apply();
1589 Constraint constraintZ = Constraint::New<float>(actor, Actor::Property::POSITION_Z, EqualToConstraint());
1590 constraintZ.AddSource(Source(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE));
1591 constraintZ.Apply();
1593 application.SendNotification();
1594 application.Render();
1596 DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::POSITION_X), 0.1f, TEST_LOCATION);
1597 DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::POSITION_Y), 0.5f, TEST_LOCATION);
1598 DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::POSITION_Z), 200.0f, TEST_LOCATION);
1600 camera.SetFieldOfView(0.5f);
1601 camera.SetAspectRatio(0.2f);
1602 camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, 100.0f);
1604 application.SendNotification();
1605 application.Render();
1607 DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::POSITION_X), 0.5f, TEST_LOCATION);
1608 DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::POSITION_Y), 0.2f, TEST_LOCATION);
1609 DALI_TEST_EQUALS(actor.GetCurrentProperty<float>(Actor::Property::POSITION_Z), 100.0f, TEST_LOCATION);
1613 int UtcDaliCameraActorAnimatedProperties03(void)
1615 TestApplication application;
1616 tet_infoline("Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()");
1618 CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
1621 Actor actor = Actor::New();
1622 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
1623 actor.SetProperty(Actor::Property::POSITION, Vector2(0.1f, 0.0f));
1624 application.GetScene().Add(actor);
1626 Radian sourceFoV = Radian(0.6f);
1627 float sourceAspect = 0.7f;
1629 Radian targetFoV = Radian(0.1f);
1630 float targetAspect = 1.3f;
1632 Matrix expectedProjectionMatrix1;
1633 Matrix expectedProjectionMatrix2;
1634 Matrix expectedProjectionMatrix3;
1636 // Reduce near-far value for projection matrix epsilon
1637 camera.SetNearClippingPlane(1.0f);
1638 camera.SetFarClippingPlane(3.0f);
1640 // Build expect projection matrix
1641 camera.SetFieldOfView(sourceFoV.radian);
1642 camera.SetAspectRatio(sourceAspect);
1643 application.SendNotification();
1644 application.Render();
1645 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix1);
1647 camera.SetFieldOfView(sourceFoV.radian * 0.6f + targetFoV.radian * 0.4f);
1648 camera.SetAspectRatio(sourceAspect * 0.6f + targetAspect * 0.4f);
1649 application.SendNotification();
1650 application.Render();
1651 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix2);
1653 camera.SetFieldOfView(targetFoV.radian);
1654 camera.SetAspectRatio(targetAspect);
1655 application.SendNotification();
1656 application.Render();
1657 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix3);
1659 auto TestAnimationProgress = [&]() {
1660 Matrix projectionMatrix;
1662 application.SendNotification();
1663 application.Render(0);
1666 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::FIELD_OF_VIEW), sourceFoV.radian, TEST_LOCATION);
1667 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), sourceAspect, TEST_LOCATION);
1669 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
1670 DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix1, Epsilon<100000>::value, TEST_LOCATION);
1672 application.SendNotification();
1673 application.Render(400);
1676 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::FIELD_OF_VIEW), sourceFoV.radian * 0.6f + targetFoV.radian * 0.4f, TEST_LOCATION);
1677 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), sourceAspect * 0.6f + targetAspect * 0.4f, TEST_LOCATION);
1679 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
1680 DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix2, Epsilon<100000>::value, TEST_LOCATION);
1682 application.SendNotification();
1683 application.Render(600);
1686 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::FIELD_OF_VIEW), targetFoV.radian, TEST_LOCATION);
1687 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), targetAspect, TEST_LOCATION);
1689 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
1690 DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix3, Epsilon<100000>::value, TEST_LOCATION);
1692 // Ensure Animate finished.
1693 application.SendNotification();
1694 application.Render(16);
1699 tet_printf("AnimateTo\n");
1700 camera.SetProperty(CameraActor::Property::FIELD_OF_VIEW, sourceFoV.radian);
1701 camera.SetProperty(CameraActor::Property::ASPECT_RATIO, sourceAspect);
1702 Animation animation = Animation::New(1.0f);
1703 animation.AnimateTo(Property(camera, CameraActor::Property::FIELD_OF_VIEW), targetFoV.radian);
1704 animation.AnimateTo(Property(camera, CameraActor::Property::ASPECT_RATIO), targetAspect);
1705 animation.AnimateTo(Property(camera, Actor::Property::POSITION_X), 0.0f); ///< For line coverage.
1708 TestAnimationProgress();
1713 tet_printf("AnimateBetween\n");
1714 Animation animation = Animation::New(1.0f);
1716 KeyFrames keyFrames1 = KeyFrames::New();
1717 keyFrames1.Add(0.0f, sourceFoV.radian);
1718 keyFrames1.Add(1.0f, targetFoV.radian);
1720 KeyFrames keyFrames2 = KeyFrames::New();
1721 keyFrames2.Add(0.0f, sourceAspect);
1722 keyFrames2.Add(1.0f, targetAspect);
1724 animation.AnimateBetween(Property(camera, CameraActor::Property::FIELD_OF_VIEW), keyFrames1);
1725 animation.AnimateBetween(Property(camera, CameraActor::Property::ASPECT_RATIO), keyFrames2);
1729 TestAnimationProgress();
1734 tet_printf("AnimateBy\n");
1735 camera.SetProperty(CameraActor::Property::FIELD_OF_VIEW, sourceFoV.radian);
1736 camera.SetProperty(CameraActor::Property::ASPECT_RATIO, sourceAspect);
1737 Animation animation = Animation::New(1.0f);
1738 animation.AnimateBy(Property(camera, CameraActor::Property::FIELD_OF_VIEW), targetFoV.radian - sourceFoV.radian);
1739 animation.AnimateBy(Property(camera, CameraActor::Property::ASPECT_RATIO), targetAspect - sourceAspect);
1742 TestAnimationProgress();
1748 int UtcDaliCameraActorAnimatedProperties04(void)
1750 TestApplication application;
1751 tet_infoline("Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()");
1753 CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
1755 // Make camera as orthographic mode
1756 camera.SetProjectionMode(Dali::Camera::ORTHOGRAPHIC_PROJECTION);
1759 Actor actor = Actor::New();
1760 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
1761 actor.SetProperty(Actor::Property::POSITION, Vector2(0.1f, 0.0f));
1762 application.GetScene().Add(actor);
1764 float sourceOrthographic = 2.0f;
1765 float sourceAspect = 0.7f;
1767 float targetOrthographic = 4.0f;
1768 float targetAspect = 1.3f;
1770 Matrix expectedProjectionMatrix1;
1771 Matrix expectedProjectionMatrix2;
1772 Matrix expectedProjectionMatrix3;
1774 // Reduce near-far value for projection matrix epsilon
1775 camera.SetNearClippingPlane(1.0f);
1776 camera.SetFarClippingPlane(3.0f);
1778 // Build expect projection matrix
1779 camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic);
1780 camera.SetAspectRatio(sourceAspect);
1781 application.SendNotification();
1782 application.Render();
1783 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix1);
1785 camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic * 0.6f + targetOrthographic * 0.4f);
1786 camera.SetAspectRatio(sourceAspect * 0.6f + targetAspect * 0.4f);
1787 application.SendNotification();
1788 application.Render();
1789 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix2);
1791 camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, targetOrthographic);
1792 camera.SetAspectRatio(targetAspect);
1793 application.SendNotification();
1794 application.Render();
1795 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix3);
1797 auto TestAnimationProgress = [&]() {
1798 Matrix projectionMatrix;
1800 application.SendNotification();
1801 application.Render(0);
1803 float expectOrthographic;
1810 auto UpdateExpectPlaneDistance = [&]() {
1811 bool isVertical = camera.GetProperty<int>(DevelCameraActor::Property::PROJECTION_DIRECTION) == static_cast<int>(DevelCameraActor::ProjectionDirection::VERTICAL);
1812 expectLeft = -(isVertical ? expectOrthographic * expectAspect : expectOrthographic);
1813 expectRight = (isVertical ? expectOrthographic * expectAspect : expectOrthographic);
1814 expectTop = (isVertical ? expectOrthographic : expectOrthographic / expectAspect);
1815 expectBottom = -(isVertical ? expectOrthographic : expectOrthographic / expectAspect);
1819 expectOrthographic = sourceOrthographic;
1820 expectAspect = sourceAspect;
1821 UpdateExpectPlaneDistance();
1822 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), expectOrthographic, TEST_LOCATION);
1823 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), expectAspect, TEST_LOCATION);
1824 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::LEFT_PLANE_DISTANCE), expectLeft, TEST_LOCATION);
1825 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::RIGHT_PLANE_DISTANCE), expectRight, TEST_LOCATION);
1826 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::TOP_PLANE_DISTANCE), expectTop, TEST_LOCATION);
1827 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::BOTTOM_PLANE_DISTANCE), expectBottom, TEST_LOCATION);
1829 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
1830 DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix1, Epsilon<100000>::value, TEST_LOCATION);
1832 application.SendNotification();
1833 application.Render(400);
1836 expectOrthographic = sourceOrthographic * 0.6f + targetOrthographic * 0.4f;
1837 expectAspect = sourceAspect * 0.6f + targetAspect * 0.4f;
1838 UpdateExpectPlaneDistance();
1839 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), expectOrthographic, TEST_LOCATION);
1840 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), expectAspect, TEST_LOCATION);
1841 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::LEFT_PLANE_DISTANCE), expectLeft, TEST_LOCATION);
1842 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::RIGHT_PLANE_DISTANCE), expectRight, TEST_LOCATION);
1843 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::TOP_PLANE_DISTANCE), expectTop, TEST_LOCATION);
1844 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::BOTTOM_PLANE_DISTANCE), expectBottom, TEST_LOCATION);
1846 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
1847 DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix2, Epsilon<100000>::value, TEST_LOCATION);
1849 application.SendNotification();
1850 application.Render(600);
1853 expectOrthographic = targetOrthographic;
1854 expectAspect = targetAspect;
1855 UpdateExpectPlaneDistance();
1856 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), expectOrthographic, TEST_LOCATION);
1857 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), expectAspect, TEST_LOCATION);
1858 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::LEFT_PLANE_DISTANCE), expectLeft, TEST_LOCATION);
1859 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::RIGHT_PLANE_DISTANCE), expectRight, TEST_LOCATION);
1860 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::TOP_PLANE_DISTANCE), expectTop, TEST_LOCATION);
1861 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::BOTTOM_PLANE_DISTANCE), expectBottom, TEST_LOCATION);
1863 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
1864 DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix3, Epsilon<100000>::value, TEST_LOCATION);
1866 // Ensure Animate finished.
1867 application.SendNotification();
1868 application.Render(16);
1873 tet_printf("AnimateTo - vertical\n");
1874 camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic);
1875 camera.SetProperty(CameraActor::Property::ASPECT_RATIO, sourceAspect);
1876 Animation animation = Animation::New(1.0f);
1877 animation.AnimateTo(Property(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), targetOrthographic);
1878 animation.AnimateTo(Property(camera, CameraActor::Property::ASPECT_RATIO), targetAspect);
1880 TestAnimationProgress();
1885 tet_printf("AnimateBetween - vertical\n");
1886 Animation animation = Animation::New(1.0f);
1888 KeyFrames keyFrames1 = KeyFrames::New();
1889 keyFrames1.Add(0.0f, sourceOrthographic);
1890 keyFrames1.Add(1.0f, targetOrthographic);
1892 KeyFrames keyFrames2 = KeyFrames::New();
1893 keyFrames2.Add(0.0f, sourceAspect);
1894 keyFrames2.Add(1.0f, targetAspect);
1896 animation.AnimateBetween(Property(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), keyFrames1);
1897 animation.AnimateBetween(Property(camera, CameraActor::Property::ASPECT_RATIO), keyFrames2);
1900 TestAnimationProgress();
1905 tet_printf("AnimateBy - vertical\n");
1906 camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic);
1907 camera.SetProperty(CameraActor::Property::ASPECT_RATIO, sourceAspect);
1908 Animation animation = Animation::New(1.0f);
1909 animation.AnimateBy(Property(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), targetOrthographic - sourceOrthographic);
1910 animation.AnimateBy(Property(camera, CameraActor::Property::ASPECT_RATIO), targetAspect - sourceAspect);
1912 TestAnimationProgress();
1918 int UtcDaliCameraActorAnimatedProperties05(void)
1920 TestApplication application;
1921 tet_infoline("Testing Dali::Internal::CameraActor::GetSceneObjectAnimatableProperty()");
1923 CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
1925 // Make camera as orthographic mode and horizontal
1926 camera.SetProjectionMode(Dali::Camera::ORTHOGRAPHIC_PROJECTION);
1927 camera.SetProperty(DevelCameraActor::Property::PROJECTION_DIRECTION, DevelCameraActor::ProjectionDirection::HORIZONTAL);
1930 Actor actor = Actor::New();
1931 actor.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 100.0f));
1932 actor.SetProperty(Actor::Property::POSITION, Vector2(0.1f, 0.0f));
1933 application.GetScene().Add(actor);
1935 float sourceOrthographic = 2.0f;
1936 float sourceAspect = 0.7f;
1938 float targetOrthographic = 4.0f;
1939 float targetAspect = 1.3f;
1941 Matrix expectedProjectionMatrix1;
1942 Matrix expectedProjectionMatrix2;
1943 Matrix expectedProjectionMatrix3;
1945 // Reduce near-far value for projection matrix epsilon
1946 camera.SetNearClippingPlane(1.0f);
1947 camera.SetFarClippingPlane(3.0f);
1949 // Build expect projection matrix
1950 camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic);
1951 camera.SetAspectRatio(sourceAspect);
1952 application.SendNotification();
1953 application.Render();
1954 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix1);
1956 camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic * 0.6f + targetOrthographic * 0.4f);
1957 camera.SetAspectRatio(sourceAspect * 0.6f + targetAspect * 0.4f);
1958 application.SendNotification();
1959 application.Render();
1960 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix2);
1962 camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, targetOrthographic);
1963 camera.SetAspectRatio(targetAspect);
1964 application.SendNotification();
1965 application.Render();
1966 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(expectedProjectionMatrix3);
1968 auto TestAnimationProgress = [&]() {
1969 Matrix projectionMatrix;
1971 application.SendNotification();
1972 application.Render(0);
1974 float expectOrthographic;
1981 auto UpdateExpectPlaneDistance = [&]() {
1982 bool isVertical = camera.GetProperty<int>(DevelCameraActor::Property::PROJECTION_DIRECTION) == static_cast<int>(DevelCameraActor::ProjectionDirection::VERTICAL);
1983 expectLeft = -(isVertical ? expectOrthographic * expectAspect : expectOrthographic);
1984 expectRight = (isVertical ? expectOrthographic * expectAspect : expectOrthographic);
1985 expectTop = (isVertical ? expectOrthographic : expectOrthographic / expectAspect);
1986 expectBottom = -(isVertical ? expectOrthographic : expectOrthographic / expectAspect);
1990 expectOrthographic = sourceOrthographic;
1991 expectAspect = sourceAspect;
1992 UpdateExpectPlaneDistance();
1993 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), expectOrthographic, TEST_LOCATION);
1994 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), expectAspect, TEST_LOCATION);
1995 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::LEFT_PLANE_DISTANCE), expectLeft, TEST_LOCATION);
1996 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::RIGHT_PLANE_DISTANCE), expectRight, TEST_LOCATION);
1997 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::TOP_PLANE_DISTANCE), expectTop, TEST_LOCATION);
1998 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::BOTTOM_PLANE_DISTANCE), expectBottom, TEST_LOCATION);
2000 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
2001 DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix1, Epsilon<100000>::value, TEST_LOCATION);
2003 application.SendNotification();
2004 application.Render(400);
2007 expectOrthographic = sourceOrthographic * 0.6f + targetOrthographic * 0.4f;
2008 expectAspect = sourceAspect * 0.6f + targetAspect * 0.4f;
2009 UpdateExpectPlaneDistance();
2010 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), expectOrthographic, TEST_LOCATION);
2011 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), expectAspect, TEST_LOCATION);
2012 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::LEFT_PLANE_DISTANCE), expectLeft, TEST_LOCATION);
2013 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::RIGHT_PLANE_DISTANCE), expectRight, TEST_LOCATION);
2014 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::TOP_PLANE_DISTANCE), expectTop, TEST_LOCATION);
2015 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::BOTTOM_PLANE_DISTANCE), expectBottom, TEST_LOCATION);
2017 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
2018 DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix2, Epsilon<100000>::value, TEST_LOCATION);
2020 application.SendNotification();
2021 application.Render(600);
2024 expectOrthographic = targetOrthographic;
2025 expectAspect = targetAspect;
2026 UpdateExpectPlaneDistance();
2027 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), expectOrthographic, TEST_LOCATION);
2028 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::ASPECT_RATIO), expectAspect, TEST_LOCATION);
2029 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::LEFT_PLANE_DISTANCE), expectLeft, TEST_LOCATION);
2030 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::RIGHT_PLANE_DISTANCE), expectRight, TEST_LOCATION);
2031 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::TOP_PLANE_DISTANCE), expectTop, TEST_LOCATION);
2032 DALI_TEST_EQUALS(camera.GetCurrentProperty<float>(CameraActor::Property::BOTTOM_PLANE_DISTANCE), expectBottom, TEST_LOCATION);
2034 camera.GetProperty(CameraActor::Property::PROJECTION_MATRIX).Get(projectionMatrix);
2035 DALI_TEST_EQUALS(projectionMatrix, expectedProjectionMatrix3, Epsilon<100000>::value, TEST_LOCATION);
2037 // Ensure Animate finished.
2038 application.SendNotification();
2039 application.Render(16);
2044 tet_printf("AnimateTo - horizontal\n");
2045 camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic);
2046 camera.SetProperty(CameraActor::Property::ASPECT_RATIO, sourceAspect);
2047 Animation animation = Animation::New(1.0f);
2048 animation.AnimateTo(Property(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), targetOrthographic);
2049 animation.AnimateTo(Property(camera, CameraActor::Property::ASPECT_RATIO), targetAspect);
2051 TestAnimationProgress();
2056 tet_printf("AnimateBetween - horizontal\n");
2057 Animation animation = Animation::New(1.0f);
2059 KeyFrames keyFrames1 = KeyFrames::New();
2060 keyFrames1.Add(0.0f, sourceOrthographic);
2061 keyFrames1.Add(1.0f, targetOrthographic);
2063 KeyFrames keyFrames2 = KeyFrames::New();
2064 keyFrames2.Add(0.0f, sourceAspect);
2065 keyFrames2.Add(1.0f, targetAspect);
2067 animation.AnimateBetween(Property(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), keyFrames1);
2068 animation.AnimateBetween(Property(camera, CameraActor::Property::ASPECT_RATIO), keyFrames2);
2071 TestAnimationProgress();
2076 tet_printf("AnimateBy - horizontal\n");
2077 camera.SetProperty(Dali::DevelCameraActor::Property::ORTHOGRAPHIC_SIZE, sourceOrthographic);
2078 camera.SetProperty(CameraActor::Property::ASPECT_RATIO, sourceAspect);
2079 Animation animation = Animation::New(1.0f);
2080 animation.AnimateBy(Property(camera, DevelCameraActor::Property::ORTHOGRAPHIC_SIZE), targetOrthographic - sourceOrthographic);
2081 animation.AnimateBy(Property(camera, CameraActor::Property::ASPECT_RATIO), targetAspect - sourceAspect);
2083 TestAnimationProgress();
2089 int UtcDaliCameraActorPropertyIndices(void)
2091 TestApplication application;
2092 CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
2094 Actor basicActor = Actor::New();
2095 Property::IndexContainer indices;
2096 camera.GetPropertyIndices(indices);
2097 DALI_TEST_CHECK(indices.Size() > basicActor.GetPropertyCount());
2098 DALI_TEST_EQUALS(indices.Size(), camera.GetPropertyCount(), TEST_LOCATION);
2102 int UtcDaliCameraActorCheckLookAtAndFreeLookViews01(void)
2104 TestApplication application;
2105 Integration::Scene stage = application.GetScene();
2106 Vector2 stageSize = stage.GetSize();
2108 CameraActor freeLookCameraActor = CameraActor::New(stageSize);
2109 freeLookCameraActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2110 freeLookCameraActor.SetType(Camera::FREE_LOOK);
2112 Vector3 targetPosition(30.0f, 240.0f, -256.0f);
2113 Actor target = Actor::New();
2114 target.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2115 target.SetProperty(Actor::Property::POSITION, targetPosition);
2117 Constraint cameraOrientationConstraint = Constraint::New<Quaternion>(freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt);
2118 cameraOrientationConstraint.AddSource(Source(target, Actor::Property::WORLD_POSITION));
2119 cameraOrientationConstraint.AddSource(Source(freeLookCameraActor, Actor::Property::WORLD_POSITION));
2120 cameraOrientationConstraint.AddSource(Source(target, Actor::Property::WORLD_ORIENTATION));
2121 cameraOrientationConstraint.Apply();
2123 CameraActor lookAtCameraActor = CameraActor::New(stageSize);
2124 lookAtCameraActor.SetType(Camera::LOOK_AT_TARGET);
2125 lookAtCameraActor.SetTargetPosition(targetPosition);
2126 lookAtCameraActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2129 stage.Add(freeLookCameraActor);
2130 stage.Add(lookAtCameraActor);
2132 // Create an arbitrary vector
2133 for(float x = -1.0f; x <= 1.0f; x += 0.1f)
2135 for(float y = -1.0f; y < 1.0f; y += 0.1f)
2137 for(float z = -1.0f; z < 1.0f; z += 0.1f)
2139 Vector3 position(x, y, z);
2140 position.Normalize();
2143 freeLookCameraActor.SetProperty(Actor::Property::POSITION, position);
2144 lookAtCameraActor.SetProperty(Actor::Property::POSITION, position);
2146 application.SendNotification();
2147 application.Render();
2148 application.SendNotification();
2149 application.Render();
2150 Matrix freeLookViewMatrix;
2151 Matrix lookAtViewMatrix;
2152 freeLookCameraActor.GetProperty(CameraActor::CameraActor::Property::VIEW_MATRIX).Get(freeLookViewMatrix);
2153 lookAtCameraActor.GetProperty(CameraActor::CameraActor::Property::VIEW_MATRIX).Get(lookAtViewMatrix);
2155 DALI_TEST_EQUALS(freeLookViewMatrix, lookAtViewMatrix, 0.01, TEST_LOCATION);
2162 int UtcDaliCameraActorCheckLookAtAndFreeLookViews02(void)
2164 TestApplication application;
2165 Integration::Scene stage = application.GetScene();
2166 Vector2 stageSize = stage.GetSize();
2168 CameraActor freeLookCameraActor = CameraActor::New(stageSize);
2169 freeLookCameraActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2170 freeLookCameraActor.SetType(Camera::FREE_LOOK);
2172 Vector3 targetPosition(30.0f, 240.0f, -256.0f);
2173 Actor target = Actor::New();
2174 target.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2175 target.SetProperty(Actor::Property::POSITION, targetPosition);
2177 Constraint cameraOrientationConstraint = Constraint::New<Quaternion>(freeLookCameraActor, Actor::Property::ORIENTATION, &LookAt);
2178 cameraOrientationConstraint.AddSource(Source(target, Actor::Property::WORLD_POSITION));
2179 cameraOrientationConstraint.AddSource(Source(freeLookCameraActor, Actor::Property::WORLD_POSITION));
2180 cameraOrientationConstraint.AddSource(Source(target, Actor::Property::WORLD_ORIENTATION));
2181 cameraOrientationConstraint.Apply();
2183 CameraActor lookAtCameraActor = CameraActor::New(stageSize);
2184 lookAtCameraActor.SetType(Camera::LOOK_AT_TARGET);
2185 lookAtCameraActor.SetTargetPosition(targetPosition);
2186 lookAtCameraActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2189 stage.Add(freeLookCameraActor);
2190 stage.Add(lookAtCameraActor);
2191 stage.GetRenderTaskList().GetTask(0).SetCameraActor(freeLookCameraActor);
2193 // Create an arbitrary vector
2194 for(float x = -1.0f; x <= 1.0f; x += 0.1f)
2196 for(float y = -1.0f; y < 1.0f; y += 0.1f)
2198 for(float z = -1.0f; z < 1.0f; z += 0.1f)
2200 Vector3 position(x, y, z);
2201 position.Normalize();
2204 freeLookCameraActor.SetProperty(Actor::Property::POSITION, position);
2205 lookAtCameraActor.SetProperty(Actor::Property::POSITION, position);
2207 application.SendNotification();
2208 application.Render();
2209 application.SendNotification();
2210 application.Render();
2211 Matrix freeLookViewMatrix;
2212 freeLookCameraActor.GetProperty(CameraActor::CameraActor::Property::VIEW_MATRIX).Get(freeLookViewMatrix);
2214 Matrix freeLookWorld = freeLookCameraActor.GetCurrentProperty<Matrix>(Actor::Property::WORLD_MATRIX);
2216 Matrix freeLookTest(false);
2217 Matrix::Multiply(freeLookTest, freeLookViewMatrix, freeLookWorld);
2218 DALI_TEST_EQUALS(freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION);
2226 int UtcDaliCameraActorCheckLookAtAndFreeLookViews03(void)
2228 TestApplication application;
2229 Integration::Scene stage = application.GetScene();
2230 Vector2 stageSize = stage.GetSize();
2232 Vector3 targetPosition(Vector3::ZERO);
2233 Vector3 cameraOffset(0.0f, 0.0f, 100.0f);
2235 CameraActor freeLookCameraActor = CameraActor::New(stageSize);
2236 freeLookCameraActor.SetType(Camera::FREE_LOOK);
2237 freeLookCameraActor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2239 Quaternion cameraOrientation(Radian(Degree(180.0f)), Vector3::YAXIS);
2240 freeLookCameraActor.SetProperty(Actor::Property::POSITION, cameraOffset);
2241 freeLookCameraActor.SetProperty(Actor::Property::ORIENTATION, cameraOrientation);
2243 Actor cameraAnchor = Actor::New();
2244 cameraAnchor.Add(freeLookCameraActor);
2245 stage.Add(cameraAnchor);
2246 stage.GetRenderTaskList().GetTask(0).SetCameraActor(freeLookCameraActor);
2248 for(float angle = 1.0f; angle <= 180.0f; angle += 1.0f)
2250 Quaternion rotation(Radian(Degree(angle)), Vector3::YAXIS);
2252 freeLookCameraActor.SetProperty(Actor::Property::POSITION, rotation.Rotate(cameraOffset));
2253 cameraAnchor.SetProperty(Actor::Property::ORIENTATION, rotation);
2255 application.SendNotification();
2256 application.Render();
2257 application.SendNotification();
2258 application.Render();
2260 Matrix freeLookViewMatrix;
2261 freeLookCameraActor.GetProperty(CameraActor::CameraActor::Property::VIEW_MATRIX).Get(freeLookViewMatrix);
2263 Matrix freeLookWorld = freeLookCameraActor.GetCurrentProperty<Matrix>(Actor::Property::WORLD_MATRIX);
2265 Matrix freeLookTest(false);
2266 Matrix::Multiply(freeLookTest, freeLookViewMatrix, freeLookWorld);
2267 DALI_TEST_EQUALS(freeLookTest, Matrix::IDENTITY, 0.01f, TEST_LOCATION);
2272 int UtcDaliCameraActorReflectionByPlane(void)
2274 TestApplication application;
2276 Integration::Scene stage = application.GetScene();
2278 Vector3 targetPosition(Vector3::ZERO);
2279 Vector3 cameraOffset(0.0f, 100.0f, 100.0f);
2281 CameraActor freeLookCameraActor = stage.GetRenderTaskList().GetTask(0).GetCameraActor();
2282 freeLookCameraActor.SetType(Camera::LOOK_AT_TARGET);
2283 freeLookCameraActor.SetTargetPosition(targetPosition);
2284 freeLookCameraActor.SetProperty(Actor::Property::POSITION, cameraOffset);
2286 stage.GetRootLayer().SetProperty(Actor::Property::POSITION, Vector2(1, 0));
2288 application.SendNotification();
2289 application.Render();
2290 application.SendNotification();
2291 application.Render();
2293 Matrix matrixBefore, matrixAfter;
2294 freeLookCameraActor.GetProperty(CameraActor::CameraActor::Property::VIEW_MATRIX).Get(matrixBefore);
2295 freeLookCameraActor.SetProperty(Dali::DevelCameraActor::Property::REFLECTION_PLANE, Vector4(0.0f, 1.0f, 0.0f, 0.0f));
2296 stage.GetRootLayer().SetProperty(Actor::Property::POSITION, Vector2(0, 0));
2297 application.SendNotification();
2298 application.Render();
2299 application.SendNotification();
2300 application.Render();
2302 freeLookCameraActor.GetProperty(CameraActor::CameraActor::Property::VIEW_MATRIX).Get(matrixAfter);
2304 Vector3 position, scale;
2305 Quaternion rotation;
2306 matrixAfter.GetTransformComponents(position, rotation, scale);
2308 Quaternion reflected(0, 0, 1, 0);
2310 DALI_TEST_EQUALS(reflected, rotation, 0.01f, TEST_LOCATION);
2312 // Test Free Look camera
2313 freeLookCameraActor.SetType(Camera::FREE_LOOK);
2315 // Make sure the recalculation will take place
2316 freeLookCameraActor.SetProperty(Dali::DevelCameraActor::Property::REFLECTION_PLANE, Vector4(0.0f, 1.0f, 0.0f, 0.0f));
2318 application.SendNotification();
2319 application.Render();
2320 application.SendNotification();
2321 application.Render();
2323 // Nothing should change despite of different camera type
2324 matrixAfter.GetTransformComponents(position, rotation, scale);
2325 DALI_TEST_EQUALS(reflected, rotation, 0.01f, TEST_LOCATION);
2330 int UtcDaliCameraActorProjectionDirection(void)
2332 TestApplication application;
2334 Integration::Scene stage = application.GetScene();
2335 Vector2 stageSize = stage.GetSize();
2337 CameraActor defaultCameraActor = stage.GetRenderTaskList().GetTask(0).GetCameraActor();
2338 CameraActor expectCameraActor1 = CameraActor::New(stageSize);
2339 CameraActor expectCameraActor2 = CameraActor::New(stageSize);
2340 CameraActor expectCameraActor3 = CameraActor::New(stageSize);
2342 float fieldOfView = defaultCameraActor.GetFieldOfView();
2343 float aspectRatio = defaultCameraActor.GetAspectRatio();
2345 // Calculate expect camera 1's fov.
2346 float anotherFieldOfView = 2.0f * std::atan(std::tan(fieldOfView * 0.5f) / aspectRatio);
2347 expectCameraActor1.SetFieldOfView(anotherFieldOfView);
2349 // Calculate expect camera 2's fov and aspect ratio.
2350 float anotherFieldOfView2 = 2.0f * std::atan(std::tan(fieldOfView * 0.5f) * aspectRatio);
2351 float anotherAspectRatio = 1.0f / aspectRatio;
2352 expectCameraActor2.SetFieldOfView(anotherFieldOfView2);
2353 expectCameraActor2.SetAspectRatio(anotherAspectRatio);
2355 // Calculate expect camera 3's aspect raio
2356 expectCameraActor3.SetAspectRatio(anotherAspectRatio);
2358 stage.Add(expectCameraActor1);
2359 stage.Add(expectCameraActor2);
2360 stage.Add(expectCameraActor3);
2362 application.SendNotification();
2363 application.Render();
2364 application.SendNotification();
2365 application.Render();
2367 // Test default projection direction is VERTICAL
2368 DALI_TEST_EQUALS(defaultCameraActor.GetProperty<int>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), static_cast<int>(Dali::DevelCameraActor::ProjectionDirection::VERTICAL), TEST_LOCATION);
2370 Matrix matrixBefore, matrixAfter;
2371 Matrix matrixExpect1, matrixExpect2, matrixExpect3;
2373 defaultCameraActor.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixBefore);
2374 expectCameraActor1.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixExpect1);
2375 expectCameraActor2.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixExpect2);
2376 expectCameraActor3.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixExpect3);
2378 tet_printf("Check ProjectionDirection::HORIZONTAL\n");
2380 defaultCameraActor.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL);
2381 DALI_TEST_EQUALS(defaultCameraActor.GetProperty<int>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), static_cast<int>(Dali::DevelCameraActor::ProjectionDirection::HORIZONTAL), TEST_LOCATION);
2382 // NOTE : ProjectionDirection doesn't change camera actor's FieldOfView and AspectRatio value.)
2383 DALI_TEST_EQUALS(defaultCameraActor.GetFieldOfView(), fieldOfView, TEST_LOCATION);
2384 DALI_TEST_EQUALS(defaultCameraActor.GetAspectRatio(), aspectRatio, TEST_LOCATION);
2386 application.SendNotification();
2387 application.Render();
2388 application.SendNotification();
2389 application.Render();
2391 defaultCameraActor.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixAfter);
2393 // Check camera's ProjectionMatrix same as expect camera 1's ProjectionMatrix.
2394 DALI_TEST_EQUALS(matrixAfter, matrixExpect1, Dali::Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2396 tet_printf("Check ProjectionDirection::HORIZONTAL + Change aspect ratio\n");
2398 defaultCameraActor.SetAspectRatio(anotherAspectRatio);
2399 DALI_TEST_EQUALS(defaultCameraActor.GetAspectRatio(), anotherAspectRatio, TEST_LOCATION);
2401 application.SendNotification();
2402 application.Render();
2403 application.SendNotification();
2404 application.Render();
2406 defaultCameraActor.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixAfter);
2408 // Check camera's ProjectionMatrix same as expect camera 2's ProjectionMatrix.
2409 DALI_TEST_EQUALS(matrixAfter, matrixExpect2, Dali::Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2411 tet_printf("Check ProjectionDirection::HORIZONTAL + Change aspect ratio + Change fov\n");
2413 defaultCameraActor.SetFieldOfView(anotherFieldOfView);
2414 DALI_TEST_EQUALS(defaultCameraActor.GetFieldOfView(), anotherFieldOfView, TEST_LOCATION);
2415 DALI_TEST_EQUALS(defaultCameraActor.GetAspectRatio(), anotherAspectRatio, TEST_LOCATION);
2417 application.SendNotification();
2418 application.Render();
2419 application.SendNotification();
2420 application.Render();
2422 defaultCameraActor.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixAfter);
2424 // Check camera's ProjectionMatrix same as expect camera 3's ProjectionMatrix.
2425 DALI_TEST_EQUALS(matrixAfter, matrixExpect3, Dali::Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2427 tet_printf("Check ProjectionDirection::VERTICAL, the original camera\n");
2429 defaultCameraActor.SetProperty(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION, Dali::DevelCameraActor::ProjectionDirection::VERTICAL);
2430 defaultCameraActor.SetFieldOfView(fieldOfView);
2431 defaultCameraActor.SetAspectRatio(aspectRatio);
2432 DALI_TEST_EQUALS(defaultCameraActor.GetProperty<int>(Dali::DevelCameraActor::Property::PROJECTION_DIRECTION), static_cast<int>(Dali::DevelCameraActor::ProjectionDirection::VERTICAL), TEST_LOCATION);
2433 DALI_TEST_EQUALS(defaultCameraActor.GetFieldOfView(), fieldOfView, TEST_LOCATION);
2434 DALI_TEST_EQUALS(defaultCameraActor.GetAspectRatio(), aspectRatio, TEST_LOCATION);
2436 application.SendNotification();
2437 application.Render();
2438 application.SendNotification();
2439 application.Render();
2441 defaultCameraActor.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(matrixAfter);
2443 // Check vertical camera's ProjectionMatrix same as original ProjectionMatrix.
2444 DALI_TEST_EQUALS(matrixAfter, matrixBefore, Dali::Math::MACHINE_EPSILON_10000, TEST_LOCATION);
2449 int UtcDaliCameraActorGetAspectRatioNegative(void)
2451 TestApplication application;
2452 Dali::CameraActor instance;
2455 instance.GetAspectRatio();
2456 DALI_TEST_CHECK(false); // Should not get here
2460 DALI_TEST_CHECK(true); // We expect an assert
2465 int UtcDaliCameraActorGetFieldOfViewNegative(void)
2467 TestApplication application;
2468 Dali::CameraActor instance;
2471 instance.GetFieldOfView();
2472 DALI_TEST_CHECK(false); // Should not get here
2476 DALI_TEST_CHECK(true); // We expect an assert
2481 int UtcDaliCameraActorGetInvertYAxisNegative(void)
2483 TestApplication application;
2484 Dali::CameraActor instance;
2487 instance.GetInvertYAxis();
2488 DALI_TEST_CHECK(false); // Should not get here
2492 DALI_TEST_CHECK(true); // We expect an assert
2497 int UtcDaliCameraActorSetAspectRatioNegative(void)
2499 TestApplication application;
2500 Dali::CameraActor instance;
2504 instance.SetAspectRatio(arg1);
2505 DALI_TEST_CHECK(false); // Should not get here
2509 DALI_TEST_CHECK(true); // We expect an assert
2514 int UtcDaliCameraActorSetFieldOfViewNegative(void)
2516 TestApplication application;
2517 Dali::CameraActor instance;
2521 instance.SetFieldOfView(arg1);
2522 DALI_TEST_CHECK(false); // Should not get here
2526 DALI_TEST_CHECK(true); // We expect an assert
2531 int UtcDaliCameraActorSetInvertYAxisNegative(void)
2533 TestApplication application;
2534 Dali::CameraActor instance;
2538 instance.SetInvertYAxis(arg1);
2539 DALI_TEST_CHECK(false); // Should not get here
2543 DALI_TEST_CHECK(true); // We expect an assert
2548 int UtcDaliCameraActorSetProjectionModeNegative(void)
2550 TestApplication application;
2551 Dali::CameraActor instance;
2554 Dali::Camera::ProjectionMode arg1(Camera::PERSPECTIVE_PROJECTION);
2555 instance.SetProjectionMode(arg1);
2556 DALI_TEST_CHECK(false); // Should not get here
2560 DALI_TEST_CHECK(true); // We expect an assert
2565 int UtcDaliCameraActorSetTargetPositionNegative(void)
2567 TestApplication application;
2568 Dali::CameraActor instance;
2572 instance.SetTargetPosition(arg1);
2573 DALI_TEST_CHECK(false); // Should not get here
2577 DALI_TEST_CHECK(true); // We expect an assert
2582 int UtcDaliCameraActorGetFarClippingPlaneNegative(void)
2584 TestApplication application;
2585 Dali::CameraActor instance;
2588 instance.GetFarClippingPlane();
2589 DALI_TEST_CHECK(false); // Should not get here
2593 DALI_TEST_CHECK(true); // We expect an assert
2598 int UtcDaliCameraActorSetFarClippingPlaneNegative(void)
2600 TestApplication application;
2601 Dali::CameraActor instance;
2605 instance.SetFarClippingPlane(arg1);
2606 DALI_TEST_CHECK(false); // Should not get here
2610 DALI_TEST_CHECK(true); // We expect an assert
2615 int UtcDaliCameraActorGetNearClippingPlaneNegative(void)
2617 TestApplication application;
2618 Dali::CameraActor instance;
2621 instance.GetNearClippingPlane();
2622 DALI_TEST_CHECK(false); // Should not get here
2626 DALI_TEST_CHECK(true); // We expect an assert
2631 int UtcDaliCameraActorSetNearClippingPlaneNegative(void)
2633 TestApplication application;
2634 Dali::CameraActor instance;
2638 instance.SetNearClippingPlane(arg1);
2639 DALI_TEST_CHECK(false); // Should not get here
2643 DALI_TEST_CHECK(true); // We expect an assert
2648 int UtcDaliCameraActorSetPerspectiveProjectionNegative(void)
2650 TestApplication application;
2651 Dali::CameraActor instance;
2655 instance.SetPerspectiveProjection(arg1);
2656 DALI_TEST_CHECK(false); // Should not get here
2660 DALI_TEST_CHECK(true); // We expect an assert
2665 int UtcDaliCameraActorSetOrthographicProjectionNegative02(void)
2667 TestApplication application;
2668 Dali::CameraActor instance;
2672 instance.SetOrthographicProjection(arg1);
2673 DALI_TEST_CHECK(false); // Should not get here
2677 DALI_TEST_CHECK(true); // We expect an assert
2682 int UtcDaliCameraActorSetTypeNegative(void)
2684 TestApplication application;
2685 Dali::CameraActor instance;
2688 Dali::Camera::Type arg1(Camera::FREE_LOOK);
2689 instance.SetType(arg1);
2690 DALI_TEST_CHECK(false); // Should not get here
2694 DALI_TEST_CHECK(true); // We expect an assert
2699 int UtcDaliCameraActorGetProjectionModeNegative(void)
2701 TestApplication application;
2702 Dali::CameraActor instance;
2705 instance.GetProjectionMode();
2706 DALI_TEST_CHECK(false); // Should not get here
2710 DALI_TEST_CHECK(true); // We expect an assert
2715 int UtcDaliCameraActorGetTargetPositionNegative(void)
2717 TestApplication application;
2718 Dali::CameraActor instance;
2721 instance.GetTargetPosition();
2722 DALI_TEST_CHECK(false); // Should not get here
2726 DALI_TEST_CHECK(true); // We expect an assert
2731 int UtcDaliCameraActorGetTypeNegative(void)
2733 TestApplication application;
2734 Dali::CameraActor instance;
2738 DALI_TEST_CHECK(false); // Should not get here
2742 DALI_TEST_CHECK(true); // We expect an assert
2747 int UtcDaliCameraActorNewDefaultOrthogonalProjection01(void)
2749 TestApplication application;
2750 tet_infoline("Test that changing to orthogonal projection and then adding to scene calculates the right defaults");
2752 CameraActor actor = CameraActor::New();
2753 DALI_TEST_CHECK(actor);
2755 actor.SetProjectionMode(Camera::ORTHOGRAPHIC_PROJECTION);
2756 application.GetScene().Add(actor);
2758 // Test application screen size is 480x800
2759 // Check that the properties match to that screen size
2761 actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
2762 DALI_TEST_EQUALS(480.0f / 800.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2764 actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
2765 DALI_TEST_EQUALS(800.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2767 actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(value);
2768 DALI_TEST_EQUALS(4895.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2770 actor.GetProperty(CameraActor::Property::LEFT_PLANE_DISTANCE).Get(value);
2771 DALI_TEST_EQUALS(-240.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2772 actor.GetProperty(CameraActor::Property::RIGHT_PLANE_DISTANCE).Get(value);
2773 DALI_TEST_EQUALS(240.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2775 actor.GetProperty(CameraActor::Property::TOP_PLANE_DISTANCE).Get(value);
2776 DALI_TEST_EQUALS(400.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2777 actor.GetProperty(CameraActor::Property::BOTTOM_PLANE_DISTANCE).Get(value);
2778 DALI_TEST_EQUALS(-400.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2780 DALI_TEST_EQUALS(1600.0f, actor.GetProperty(Actor::Property::POSITION_Z).Get<float>(), TEST_LOCATION);
2782 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
2786 int UtcDaliCameraActorNewDefaultOrthogonalProjection02(void)
2788 TestApplication application;
2789 tet_infoline("Test that changing to orthogonal projection and then adding to scene calculates the right defaults");
2791 CameraActor actor = CameraActor::New();
2792 DALI_TEST_CHECK(actor);
2794 actor.SetOrthographicProjection(Vector2::ZERO);
2795 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
2796 application.GetScene().Add(actor);
2798 // Test application screen size is 480x800
2799 // Check that the properties match to that screen size
2801 actor.GetProperty(CameraActor::Property::ASPECT_RATIO).Get(value);
2802 DALI_TEST_EQUALS(480.0f / 800.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2804 actor.GetProperty(CameraActor::Property::NEAR_PLANE_DISTANCE).Get(value);
2805 DALI_TEST_EQUALS(800.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2807 actor.GetProperty(CameraActor::Property::FAR_PLANE_DISTANCE).Get(value);
2808 DALI_TEST_EQUALS(4895.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2810 actor.GetProperty(CameraActor::Property::LEFT_PLANE_DISTANCE).Get(value);
2811 DALI_TEST_EQUALS(-240.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2812 actor.GetProperty(CameraActor::Property::RIGHT_PLANE_DISTANCE).Get(value);
2813 DALI_TEST_EQUALS(240.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2815 actor.GetProperty(CameraActor::Property::TOP_PLANE_DISTANCE).Get(value);
2816 DALI_TEST_EQUALS(400.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2817 actor.GetProperty(CameraActor::Property::BOTTOM_PLANE_DISTANCE).Get(value);
2818 DALI_TEST_EQUALS(-400.0f, value, FLOAT_EPSILON, TEST_LOCATION);
2820 DALI_TEST_EQUALS(1600.0f, actor.GetProperty(Actor::Property::POSITION_Z).Get<float>(), TEST_LOCATION);
2822 DALI_TEST_EQUALS(actor.GetProjectionMode(), Dali::Camera::ORTHOGRAPHIC_PROJECTION, TEST_LOCATION);
2826 // Add tests for culling:
2827 // add large actor just outside canvas, & rotate it 45% - should still be rendered
2828 // Rotate back to 0, should be culled.
2830 int UtcDaliCameraActorCulling01(void)
2832 TestApplication application;
2833 auto& gfx = application.GetGraphicsController();
2835 tet_infoline("Create a renderable actor and position it slightly to the left of the scene");
2836 tet_infoline("The actor should not be rendered");
2838 Actor a = CreateRenderableActor(CreateTexture(TextureType::TEXTURE_2D, Pixel::Format::RGBA8888, 200, 200));
2840 a[Actor::Property::PARENT_ORIGIN] = ParentOrigin::CENTER_LEFT;
2841 a[Actor::Property::ANCHOR_POINT] = ParentOrigin::CENTER_RIGHT;
2842 a[Actor::Property::POSITION] = Vector3(-10.0f, 0.0f, 0.0f);
2844 application.GetScene().Add(a);
2846 application.SendNotification();
2847 application.Render();
2849 auto& cmdStack = gfx.mCommandBufferCallStack;
2850 DALI_TEST_CHECK(!cmdStack.FindMethod("Draw") && !cmdStack.FindMethod("DrawIndexed"));
2852 tet_infoline("Rotate the actor 45 degrees, the actor should now be rendered");
2853 a[Actor::Property::ORIENTATION] = Quaternion(Dali::ANGLE_45, Vector3::ZAXIS);
2854 application.SendNotification();
2855 application.Render();
2857 DALI_TEST_CHECK(cmdStack.FindMethod("Draw") || cmdStack.FindMethod("DrawIndexed"));
2862 int UtcDaliCameraActorSetProperty(void)
2864 TestApplication application;
2866 tet_infoline("Test the CameraActor reset properties when On Scene, if user set property explicitly.");
2868 CameraActor camera = CameraActor::New();
2869 camera.SetFieldOfView(1.0f);
2870 application.GetScene().Add(camera);
2871 DALI_TEST_EQUALS(1.0f, camera.GetFieldOfView(), TEST_LOCATION);
2875 camera = CameraActor::New();
2876 camera.SetAspectRatio(1.0f);
2877 application.GetScene().Add(camera);
2878 DALI_TEST_EQUALS(1.0f, camera.GetAspectRatio(), TEST_LOCATION);
2882 camera = CameraActor::New();
2883 camera.SetNearClippingPlane(1.0f);
2884 application.GetScene().Add(camera);
2885 DALI_TEST_EQUALS(1.0f, camera.GetNearClippingPlane(), TEST_LOCATION);
2889 camera = CameraActor::New();
2890 camera.SetFarClippingPlane(1.0f);
2891 application.GetScene().Add(camera);
2892 DALI_TEST_EQUALS(1.0f, camera.GetFarClippingPlane(), TEST_LOCATION);
2896 camera = CameraActor::New();
2897 camera.SetProperty(Dali::Actor::Property::POSITION, Vector3(100.0f, 100.0f, 100.0f));
2898 application.GetScene().Add(camera);
2899 DALI_TEST_EQUALS(Vector3(100.0f, 100.0f, 100.0f), camera.GetProperty<Vector3>(Dali::Actor::Property::POSITION), TEST_LOCATION);
2903 camera = CameraActor::New();
2904 camera.SetProperty(Dali::Actor::Property::POSITION_X, 1.0f);
2905 application.GetScene().Add(camera);
2906 DALI_TEST_EQUALS(1.0f, camera.GetProperty<float>(Dali::Actor::Property::POSITION_X), TEST_LOCATION);
2910 camera = CameraActor::New();
2911 camera.SetProperty(Dali::Actor::Property::POSITION_Y, 1.0f);
2912 application.GetScene().Add(camera);
2913 DALI_TEST_EQUALS(1.0f, camera.GetProperty<float>(Dali::Actor::Property::POSITION_Y), TEST_LOCATION);
2917 camera = CameraActor::New();
2918 camera.SetProperty(Dali::Actor::Property::POSITION_Z, 1.0f);
2919 application.GetScene().Add(camera);
2920 DALI_TEST_EQUALS(1.0f, camera.GetProperty<float>(Dali::Actor::Property::POSITION_Z), TEST_LOCATION);
2924 camera = CameraActor::New();
2925 camera.SetProperty(Dali::Actor::Property::ORIENTATION, Quaternion(Radian(Degree(90.0f)), Vector3::XAXIS));
2926 application.GetScene().Add(camera);
2927 DALI_TEST_EQUALS(Quaternion(Radian(Degree(90.0f)), Vector3::XAXIS), camera.GetProperty<Quaternion>(Dali::Actor::Property::ORIENTATION), TEST_LOCATION);