Merge branch 'devel/master' into tizen
authorSeoyeon Kim <seoyeon2.kim@samsung.com>
Tue, 14 Dec 2021 05:27:19 +0000 (14:27 +0900)
committerSeoyeon Kim <seoyeon2.kim@samsung.com>
Tue, 14 Dec 2021 05:27:19 +0000 (14:27 +0900)
automated-tests/src/dali/utc-Dali-Scene.cpp
dali/internal/render/common/render-manager.cpp
dali/internal/update/manager/transform-manager.cpp
dali/internal/update/render-tasks/scene-graph-camera.cpp
dali/public-api/dali-core-version.cpp
packaging/dali.spec

index fc19ea7..a65463e 100644 (file)
@@ -33,6 +33,27 @@ namespace
 {
 const std::string DEFAULT_DEVICE_NAME("hwKeyboard");
 
+const char* VERTEX_SHADER = DALI_COMPOSE_SHADER(
+  attribute mediump vec2     aPosition;\n
+    uniform mediump mat4     uModelView;\n
+      uniform mediump mat4   uProjection;\n
+        uniform mediump vec3 uSize;\n void main()\n {
+          \n
+            mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);
+          \n
+            vertexPosition.xyz *= uSize;
+          \n
+            gl_Position = uProjection * uModelView * vertexPosition;
+          \n
+        }\n);
+
+const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER(
+  uniform lowp vec4 uColor;\n void main()\n {
+    \n
+      gl_FragColor = uColor;
+    \n
+  }\n);
+
 // Functor for EventProcessingFinished signal
 struct EventProcessingFinishedFunctor
 {
@@ -1107,7 +1128,8 @@ int UtcDaliSceneSurfaceRotatedWithAngle0(void)
   clippingRect = TestApplication::DEFAULT_SURFACE_RECT;
   application.RenderWithPartialUpdate(damagedRects, clippingRect);
 
-  Actor actor = CreateRenderableActor();
+  Texture image = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 4u, 4u);
+  Actor   actor = CreateRenderableActor(image, VERTEX_SHADER, FRAGMENT_SHADER);
   actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
   actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f));
   actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f));
@@ -1115,6 +1137,11 @@ int UtcDaliSceneSurfaceRotatedWithAngle0(void)
   application.GetScene().Add(actor);
 
   application.SendNotification();
+  application.Render(0);
+
+  Matrix      projection;
+  CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
+  camera.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(projection);
 
   damagedRects.clear();
   application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH,
@@ -1146,6 +1173,24 @@ int UtcDaliSceneSurfaceRotatedWithAngle0(void)
   // It should be changed.
   DALI_TEST_EQUALS(orientation, 0, TEST_LOCATION);
 
+  // Check uniform
+  Quaternion rotationAngle(Dali::ANGLE_0, Vector3::ZAXIS);
+  Matrix     rotation, newProjection;
+  rotation.SetIdentity();
+  rotation.SetTransformComponents(Vector3(1.0f, 1.0f, 1.0f), rotationAngle, Vector3(0.0f, 0.0f, 0.0f));
+  Matrix::Multiply(newProjection, projection, rotation);
+
+  DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue("uProjection", newProjection));
+
+  // Change actor size to trigger rendering
+  actor.SetProperty(Actor::Property::SIZE, Vector3(32.0f, 32.0f, 0.0f));
+
+  // Render again
+  application.SendNotification();
+  application.Render(0);
+
+  DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue("uProjection", newProjection));
+
   END_TEST;
 }
 
@@ -1173,7 +1218,8 @@ int UtcDaliSceneSurfaceRotatedWithAngle90(void)
   clippingRect = TestApplication::DEFAULT_SURFACE_RECT;
   application.RenderWithPartialUpdate(damagedRects, clippingRect);
 
-  Actor actor = CreateRenderableActor();
+  Texture image = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 4u, 4u);
+  Actor   actor = CreateRenderableActor(image, VERTEX_SHADER, FRAGMENT_SHADER);
   actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
   actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f));
   actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f));
@@ -1181,6 +1227,11 @@ int UtcDaliSceneSurfaceRotatedWithAngle90(void)
   application.GetScene().Add(actor);
 
   application.SendNotification();
+  application.Render(0);
+
+  Matrix      projection;
+  CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
+  camera.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(projection);
 
   damagedRects.clear();
   application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH,
@@ -1219,6 +1270,24 @@ int UtcDaliSceneSurfaceRotatedWithAngle90(void)
   // It should be changed.
   DALI_TEST_EQUALS(orientation, 90, TEST_LOCATION);
 
+  // Check uniform
+  Quaternion rotationAngle(Dali::ANGLE_90, Vector3::ZAXIS);
+  Matrix     rotation, newProjection;
+  rotation.SetIdentity();
+  rotation.SetTransformComponents(Vector3(1.0f, 1.0f, 1.0f), rotationAngle, Vector3(0.0f, 0.0f, 0.0f));
+  Matrix::Multiply(newProjection, projection, rotation);
+
+  DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue("uProjection", newProjection));
+
+  // Change actor size to trigger rendering
+  actor.SetProperty(Actor::Property::SIZE, Vector3(32.0f, 32.0f, 0.0f));
+
+  // Render again
+  application.SendNotification();
+  application.Render(0);
+
+  DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue("uProjection", newProjection));
+
   END_TEST;
 }
 
@@ -1246,7 +1315,8 @@ int UtcDaliSceneSurfaceRotatedWithAngle180(void)
   clippingRect = TestApplication::DEFAULT_SURFACE_RECT;
   application.RenderWithPartialUpdate(damagedRects, clippingRect);
 
-  Actor actor = CreateRenderableActor();
+  Texture image = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 4u, 4u);
+  Actor   actor = CreateRenderableActor(image, VERTEX_SHADER, FRAGMENT_SHADER);
   actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
   actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f));
   actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f));
@@ -1254,6 +1324,11 @@ int UtcDaliSceneSurfaceRotatedWithAngle180(void)
   application.GetScene().Add(actor);
 
   application.SendNotification();
+  application.Render(0);
+
+  Matrix      projection;
+  CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
+  camera.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(projection);
 
   damagedRects.clear();
   application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH,
@@ -1292,6 +1367,24 @@ int UtcDaliSceneSurfaceRotatedWithAngle180(void)
   // It should be changed.
   DALI_TEST_EQUALS(orientation, 180, TEST_LOCATION);
 
+  // Check uniform
+  Quaternion rotationAngle(Dali::ANGLE_180, Vector3::ZAXIS);
+  Matrix     rotation, newProjection;
+  rotation.SetIdentity();
+  rotation.SetTransformComponents(Vector3(1.0f, 1.0f, 1.0f), rotationAngle, Vector3(0.0f, 0.0f, 0.0f));
+  Matrix::Multiply(newProjection, projection, rotation);
+
+  DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue("uProjection", newProjection));
+
+  // Change actor size to trigger rendering
+  actor.SetProperty(Actor::Property::SIZE, Vector3(32.0f, 32.0f, 0.0f));
+
+  // Render again
+  application.SendNotification();
+  application.Render(0);
+
+  DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue("uProjection", newProjection));
+
   END_TEST;
 }
 
@@ -1319,7 +1412,8 @@ int UtcDaliSceneSurfaceRotatedWithAngle270(void)
   clippingRect = TestApplication::DEFAULT_SURFACE_RECT;
   application.RenderWithPartialUpdate(damagedRects, clippingRect);
 
-  Actor actor = CreateRenderableActor();
+  Texture image = CreateTexture(TextureType::TEXTURE_2D, Pixel::RGBA8888, 4u, 4u);
+  Actor   actor = CreateRenderableActor(image, VERTEX_SHADER, FRAGMENT_SHADER);
   actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
   actor.SetProperty(Actor::Property::POSITION, Vector3(16.0f, 16.0f, 0.0f));
   actor.SetProperty(Actor::Property::SIZE, Vector3(16.0f, 16.0f, 0.0f));
@@ -1327,6 +1421,11 @@ int UtcDaliSceneSurfaceRotatedWithAngle270(void)
   application.GetScene().Add(actor);
 
   application.SendNotification();
+  application.Render(0);
+
+  Matrix      projection;
+  CameraActor camera = application.GetScene().GetRenderTaskList().GetTask(0u).GetCameraActor();
+  camera.GetProperty(CameraActor::CameraActor::Property::PROJECTION_MATRIX).Get(projection);
 
   damagedRects.clear();
   application.GetScene().SurfaceRotated(TestApplication::DEFAULT_SURFACE_WIDTH,
@@ -1365,6 +1464,24 @@ int UtcDaliSceneSurfaceRotatedWithAngle270(void)
   // It should be changed.
   DALI_TEST_EQUALS(orientation, 270, TEST_LOCATION);
 
+  // Check uniform
+  Quaternion rotationAngle(Dali::ANGLE_270, Vector3::ZAXIS);
+  Matrix     rotation, newProjection;
+  rotation.SetIdentity();
+  rotation.SetTransformComponents(Vector3(1.0f, 1.0f, 1.0f), rotationAngle, Vector3(0.0f, 0.0f, 0.0f));
+  Matrix::Multiply(newProjection, projection, rotation);
+
+  DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue("uProjection", newProjection));
+
+  // Change actor size to trigger rendering
+  actor.SetProperty(Actor::Property::SIZE, Vector3(32.0f, 32.0f, 0.0f));
+
+  // Render again
+  application.SendNotification();
+  application.Render(0);
+
+  DALI_TEST_CHECK(application.GetGlAbstraction().CheckUniformValue("uProjection", newProjection));
+
   END_TEST;
 }
 
@@ -1444,8 +1561,6 @@ int UtcDaliSceneSetRotationCompletedAcknowledgementWithAngle90(void)
   END_TEST;
 }
 
-
-
 int UtcDaliSceneKeyEventGeneratedSignalP(void)
 {
   TestApplication          application;
index 3c9f87c..2d63a0a 100644 (file)
@@ -707,7 +707,9 @@ void RenderManager::PreRender(Integration::Scene& scene, std::vector<Rect<int>>&
 
 void RenderManager::RenderScene(Integration::RenderStatus& status, Integration::Scene& scene, bool renderToFbo)
 {
-  Rect<int> clippingRect;
+  SceneGraph::Scene* sceneObject  = GetImplementation(scene).GetSceneObject();
+  Rect<int>          clippingRect = sceneObject->GetSurfaceRect();
+
   RenderScene(status, scene, renderToFbo, clippingRect);
 }
 
index fe4d4f3..db4f042 100644 (file)
@@ -303,7 +303,7 @@ bool TransformManager::Update()
           Matrix::Multiply(mWorld[i], mLocal[i], parentMatrix);
         }
 
-        mLocalMatrixDirty[i] = (localMatrix != mLocal[i]);
+        mLocalMatrixDirty[i] = mComponentDirty[i] || (localMatrix != mLocal[i]);
       }
     }
     else //Component has no parent or doesn't inherit transform
@@ -313,7 +313,7 @@ bool TransformManager::Update()
       localPosition = mTxComponentAnimatable[i].mPosition + centerPosition;
       mLocal[i].SetTransformComponents(mTxComponentAnimatable[i].mScale, mTxComponentAnimatable[i].mOrientation, localPosition);
       mWorld[i]            = mLocal[i];
-      mLocalMatrixDirty[i] = (localMatrix != mLocal[i]);
+      mLocalMatrixDirty[i] = mComponentDirty[i] || (localMatrix != mLocal[i]);
     }
 
     //Update the bounding sphere
index 5d3bab8..f7b2b1c 100644 (file)
@@ -328,8 +328,8 @@ void Camera::SetReflectByPlane(const Vector4& plane)
 
 void Camera::RotateProjection(int rotationAngle)
 {
-  mProjectionRotation = rotationAngle;
-  mUpdateViewFlag     = UPDATE_COUNT;
+  mProjectionRotation   = rotationAngle;
+  mUpdateProjectionFlag = UPDATE_COUNT;
 }
 
 const Matrix& Camera::GetProjectionMatrix(BufferIndex bufferIndex) const
@@ -609,7 +609,7 @@ uint32_t Camera::UpdateProjection(BufferIndex updateBufferIndex)
       // The projection matrix was updated in the previous frame; copy it
       mProjectionMatrix.CopyPrevious(updateBufferIndex);
 
-      finalProjection = mProjectionMatrix[updateBufferIndex];
+      finalProjection = mFinalProjection[updateBufferIndex ? 0 : 1];
     }
     else // UPDATE_COUNT == mUpdateProjectionFlag
     {
index 79d6547..77ff3e3 100644 (file)
@@ -27,7 +27,7 @@ namespace Dali
 {
 const uint32_t    CORE_MAJOR_VERSION = 2;
 const uint32_t    CORE_MINOR_VERSION = 1;
-const uint32_t    CORE_MICRO_VERSION = 1;
+const uint32_t    CORE_MICRO_VERSION = 2;
 const char* const CORE_BUILD_DATE    = __DATE__ " " __TIME__;
 
 #ifdef DEBUG_ENABLED
index 0ada0ba..9026aef 100644 (file)
@@ -1,6 +1,6 @@
 Name:       dali2
 Summary:    DALi 3D Engine
-Version:    2.1.1
+Version:    2.1.2
 Release:    1
 Group:      System/Libraries
 License:    Apache-2.0 and BSD-3-Clause and MIT