[Tizen] Use DepthIndex for 3D rendering order 40/302540/4
authorseungho baek <sbsh.baek@samsung.com>
Tue, 5 Dec 2023 08:37:37 +0000 (17:37 +0900)
committerseungho baek <sbsh.baek@samsung.com>
Wed, 13 Dec 2023 00:18:28 +0000 (09:18 +0900)
Change-Id: Id722744a3db4aa1504ae45894b6edcc4039994d7
Signed-off-by: seungho baek <sbsh.baek@samsung.com>
automated-tests/src/dali-scene3d-internal/utc-Dali-ModelPrimitiveImpl.cpp
automated-tests/src/dali-scene3d/utc-Dali-Material.cpp
automated-tests/src/dali-scene3d/utc-Dali-ModelPrimitive.cpp
dali-scene3d/internal/model-components/material-impl.cpp
dali-scene3d/internal/model-components/material-impl.h
dali-scene3d/internal/model-components/material-modify-observer.h
dali-scene3d/internal/model-components/model-primitive-impl.cpp
dali-scene3d/internal/model-components/model-primitive-impl.h
dali-scene3d/public-api/common/scene-depth-index-ranges.h [new file with mode: 0644]
dali-scene3d/public-api/model-components/material.h

index 00dba92..57ba4c2 100644 (file)
@@ -21,6 +21,7 @@
 #include <iostream>
 
 #include <dali-scene3d/internal/model-components/model-primitive-impl.h>
+#include <dali-scene3d/public-api/common/scene-depth-index-ranges.h>
 
 using namespace Dali;
 using namespace Dali::Toolkit;
@@ -62,4 +63,32 @@ int UtcDaliModelPrimitiveImplSetData(void)
   DALI_TEST_CHECK(GetImplementation(modelPrimitive).GetRenderer());
 
   END_TEST;
+}
+
+int UtcDaliModelPrimitiveMaterialDepthIndex(void)
+{
+  ToolkitTestApplication application;
+
+  Scene3D::ModelPrimitive modelPrimitive = Scene3D::ModelPrimitive::New();
+
+  tet_printf("Check primitive don't have material initial time\n");
+
+  DALI_TEST_CHECK(!modelPrimitive.GetMaterial());
+
+  Dali::Geometry geometry = Dali::Geometry::New();
+  Dali::Scene3D::Material material = Dali::Scene3D::Material::New();
+
+  modelPrimitive.SetGeometry(geometry);
+  modelPrimitive.SetMaterial(material);
+  DALI_TEST_CHECK(material == modelPrimitive.GetMaterial());
+
+  DALI_TEST_CHECK(GetImplementation(modelPrimitive).GetRenderer());
+
+  Dali::Renderer renderer = GetImplementation(modelPrimitive).GetRenderer();
+  DALI_TEST_CHECK(renderer.GetProperty<int32_t>(Dali::Renderer::Property::DEPTH_INDEX) == Scene3D::DepthIndex::Ranges::SCENE);
+
+  material.SetProperty(Scene3D::Material::Property::DEPTH_INDEX, 50);
+  DALI_TEST_CHECK(renderer.GetProperty<int32_t>(Dali::Renderer::Property::DEPTH_INDEX) == 50);
+
+  END_TEST;
 }
\ No newline at end of file
index c3fcdd0..36f6a22 100644 (file)
@@ -224,6 +224,10 @@ int UtcDaliMaterialSetGetProperty(void)
   material.SetProperty(Scene3D::Material::Property::SPECULAR_COLOR_FACTOR, specularColorFactor);
   DALI_TEST_EQUALS(specularColorFactor, material.GetProperty<Vector3>(Scene3D::Material::Property::SPECULAR_COLOR_FACTOR), TEST_LOCATION);
 
+  int32_t depthIndex = 50;
+  material.SetProperty(Scene3D::Material::Property::DEPTH_INDEX, depthIndex);
+  DALI_TEST_EQUALS(depthIndex, material.GetProperty<int32_t>(Scene3D::Material::Property::DEPTH_INDEX), TEST_LOCATION);
+
   END_TEST;
 }
 
@@ -307,4 +311,4 @@ int UtcDaliMaterialSetGetSampler(void)
   DALI_TEST_CHECK(!material.GetSampler((Scene3D::Material::TextureType)100));
 
   END_TEST;
-}
\ No newline at end of file
+}
index 3719861..0733aab 100644 (file)
@@ -184,4 +184,4 @@ int UtcDaliModelPrimitiveSetGetMaterial(void)
   DALI_TEST_CHECK(material2 == modelPrimitive.GetMaterial());
 
   END_TEST;
-}
\ No newline at end of file
+}
index 69a1a53..7496e4e 100644 (file)
@@ -324,6 +324,16 @@ void Material::SetProperty(Dali::Property::Index index, Dali::Property::Value pr
       }
       break;
     }
+    case Dali::Scene3D::Material::Property::DEPTH_INDEX:
+    {
+      int32_t depthIndex = 0;
+      if(propertyValue.Get(depthIndex) && mDepthIndex != depthIndex)
+      {
+        mDepthIndex = depthIndex;
+        mModifyFlag |= MaterialModifyObserver::ModifyFlag::PROPERTY;
+      }
+      break;
+    }
   }
 
   if(needToApply)
@@ -437,6 +447,11 @@ Dali::Property::Value Material::GetProperty(Dali::Property::Index index) const
       value = Vector3(mTextureInformations[TextureIndex::SPECULAR_COLOR].mFactor);
       break;
     }
+    case Dali::Scene3D::Material::Property::DEPTH_INDEX:
+    {
+      value = mDepthIndex;
+      break;
+    }
   }
   return value;
 }
@@ -694,6 +709,11 @@ void Material::SetRendererUniform(Dali::Renderer renderer)
   Scene3D::Loader::RendererState::Apply(mRendererState, renderer);
 }
 
+void Material::SetRendererProperty(Dali::Renderer renderer)
+{
+  renderer.SetProperty(Dali::Renderer::Property::DEPTH_INDEX, mDepthIndex);
+}
+
 uint32_t Material::GetShadowMapTextureOffset()
 {
   return OFFSET_FOR_SHADOW_MAP_TEXTURE;
index fe45dee..76432d7 100644 (file)
@@ -36,6 +36,7 @@
 #include <dali-scene3d/public-api/loader/shader-definition.h>
 #include <dali-scene3d/public-api/loader/shader-option.h>
 #include <dali-scene3d/public-api/model-components/material.h>
+#include <dali-scene3d/public-api/common/scene-depth-index-ranges.h>
 
 namespace Dali
 {
@@ -197,6 +198,13 @@ public:
   void SetRendererUniform(Dali::Renderer renderer);
 
   /**
+   * @brief Sets property value to the Renderer.
+   *
+   * @param[in] renderer Renderer object.
+   */
+  void SetRendererProperty(Dali::Renderer renderer);
+
+  /**
    * @brief Retrieves shadow map texture offset.
    *
    * @return shadow map texture offset.
@@ -300,6 +308,8 @@ private:
   uint32_t                             mMaterialFlag  = std::numeric_limits<uint32_t>::max();
   Scene3D::Loader::RendererState::Type mRendererState = Scene3D::Loader::RendererState::NONE;
 
+  int32_t mDepthIndex{Scene3D::DepthIndex::Ranges::SCENE};
+
   bool mIsOpaque = true;
   bool mIsMask   = false;
   bool mObserverNotifying; ///< True if observe is notify now. If then, we should not change the mObservers.
index 4b0c93d..e5e3bbb 100644 (file)
@@ -41,10 +41,11 @@ public:
    */
   enum ModifyFlag
   {
-    NONE    = 0,
-    TEXTURE = 1 << 0,
-    SHADER  = 1 << 1,
-    UNIFORM = 1 << 2,
+    NONE     = 0,
+    TEXTURE  = 1 << 0,
+    SHADER   = 1 << 1,
+    UNIFORM  = 1 << 2,
+    PROPERTY = 1 << 3,
   };
 
   /**
index 871f8ca..f86b951 100644 (file)
@@ -351,13 +351,18 @@ void ModelPrimitive::ApplyMaterialToRenderer(MaterialModifyObserver::ModifyFlag
   uint32_t uniformFlag = (flag & static_cast<uint32_t>(MaterialModifyObserver::ModifyFlag::UNIFORM));
   if(mIsMaterialChanged || uniformFlag == static_cast<uint32_t>(MaterialModifyObserver::ModifyFlag::UNIFORM))
   {
-    if(!mRenderer)
+    if(mRenderer)
     {
-      mNeedToSetRendererUniform = true;
+      UpdateRendererUniform();
     }
-    else
+  }
+
+  uint32_t propertyFlag = (flag & static_cast<uint32_t>(MaterialModifyObserver::ModifyFlag::PROPERTY));
+  if(mIsMaterialChanged || propertyFlag == static_cast<uint32_t>(MaterialModifyObserver::ModifyFlag::PROPERTY))
+  {
+    if(mRenderer)
     {
-      UpdateRendererUniform();
+      UpdateRendererProperty();
     }
   }
   mIsMaterialChanged = false;
@@ -373,6 +378,7 @@ void ModelPrimitive::CreateRenderer()
   mRenderer = Renderer::New(mGeometry, mShader);
   mRenderer.SetTextures(mTextureSet);
   UpdateRendererUniform();
+  UpdateRendererProperty();
 
   for(auto* observer : mObservers)
   {
@@ -464,6 +470,14 @@ void ModelPrimitive::UpdateRendererUniform()
   }
 }
 
+void ModelPrimitive::UpdateRendererProperty()
+{
+  if(mMaterial)
+  {
+    GetImplementation(mMaterial).SetRendererProperty(mRenderer);
+  }
+}
+
 } // namespace Internal
 
 } // namespace Scene3D
index c6dbf37..ad0f92b 100644 (file)
@@ -203,6 +203,11 @@ private:
   void UpdateRendererUniform();
 
   /**
+   * @brief Updates the property of renderer.
+   */
+  void UpdateRendererProperty();
+
+  /**
    * @brief Creates a renderer.
    */
   void CreateRenderer();
@@ -252,7 +257,6 @@ private:
   Scene3D::Loader::BlendShapes::Version        mBlendShapeVersion = Scene3D::Loader::BlendShapes::Version::INVALID;
 
   bool mIsMaterialChanged        = false;
-  bool mNeedToSetRendererUniform = false;
 };
 
 } // namespace Internal
diff --git a/dali-scene3d/public-api/common/scene-depth-index-ranges.h b/dali-scene3d/public-api/common/scene-depth-index-ranges.h
new file mode 100644 (file)
index 0000000..7756f4d
--- /dev/null
@@ -0,0 +1,55 @@
+#ifndef DALI_SCENE3D_SCENE_DEPTH_INDEX_RANGES_H
+#define DALI_SCENE3D_SCENE_DEPTH_INDEX_RANGES_H
+
+/*
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+namespace Dali
+{
+namespace Scene3D
+{
+namespace DepthIndex
+{
+
+/**
+ * @brief Depth index ranges to define rendering order.
+ */
+enum Ranges
+{
+  /**
+   * @brief Depth index range for 3D scene content.
+   * @details The range of the scene content is between [SCENE, SCENE + 999]
+   */
+  SCENE = -2000,
+
+  /**
+   * @brief Depth index range for UI scene content.
+   * @details The range of the UI content is between [UI, UI + 999].
+   * Some of internally created Renderer of Toolkit::Control already has
+   * default depth index value.
+   * Developer can fix the default values for their design.
+   */
+  UI = 0
+};
+
+} // namespace DepthIndex
+
+} // namespace Scene3D
+
+} // namespace Dali
+
+#endif // DALI_SCENE3D_SCENE_DEPTH_INDEX_RANGES_H
index c48edbf..ea7227a 100644 (file)
@@ -48,7 +48,7 @@ class Material;
 /**
  * @brief Class for setting Material properties of 3D models
  *
- * @SINCE_2_2.99
+ * @SINCE_2_2.22
  *
  * @note This Material class is for setting Material properties of 3D models.
  * This Material supports properties and textures for PBR.
@@ -67,21 +67,21 @@ class DALI_SCENE3D_API Material : public Dali::BaseHandle
 public:
   /**
    * @brief Enumeration for the start and end property ranges for material.
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    */
   enum PropertyRange
   {
-    PROPERTY_START_INDEX          = PROPERTY_REGISTRATION_START_INDEX,    ///< Start index is used by the property registration macro. @SINCE_2_2.99
-    MATERIAL_PROPERTY_START_INDEX = PROPERTY_START_INDEX,                 ///< Start index of Control properties. @SINCE_2_2.99
-    MATERIAL_PROPERTY_END_INDEX   = MATERIAL_PROPERTY_START_INDEX + 1000, ///< Reserving 1000 property indices. @SINCE_2_2.99
+    PROPERTY_START_INDEX          = PROPERTY_REGISTRATION_START_INDEX,    ///< Start index is used by the property registration macro. @SINCE_2_2.22
+    MATERIAL_PROPERTY_START_INDEX = PROPERTY_START_INDEX,                 ///< Start index of Control properties. @SINCE_2_2.22
+    MATERIAL_PROPERTY_END_INDEX   = MATERIAL_PROPERTY_START_INDEX + 1000, ///< Reserving 1000 property indices. @SINCE_2_2.22
 
-    ANIMATABLE_PROPERTY_START_INDEX = ANIMATABLE_PROPERTY_REGISTRATION_START_INDEX,        ///< @SINCE_2_2.99
-    ANIMATABLE_PROPERTY_END_INDEX   = ANIMATABLE_PROPERTY_REGISTRATION_START_INDEX + 1000, ///< Reserve animatable property indices, @SINCE_2_2.99
+    ANIMATABLE_PROPERTY_START_INDEX = ANIMATABLE_PROPERTY_REGISTRATION_START_INDEX,        ///< @SINCE_2_2.22
+    ANIMATABLE_PROPERTY_END_INDEX   = ANIMATABLE_PROPERTY_REGISTRATION_START_INDEX + 1000, ///< Reserve animatable property indices, @SINCE_2_2.22
   };
 
   /**
    * @brief Enumeration for the instance of properties belonging to the Material class.
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    */
   struct Property
   {
@@ -90,142 +90,165 @@ public:
       /**
        * @brief Name of material.
        * @details type Property::STRING.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       NAME = MATERIAL_PROPERTY_START_INDEX,
 
       /**
        * @brief Property for the URL of the base color texture.
        * @details Type Property::STRING.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       BASE_COLOR_URL,
 
       /**
        * @brief Property for the base color factor of the material surface.
        * @details Type Property::VECTOR4.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       BASE_COLOR_FACTOR,
 
       /**
        * @brief Property for the URL of the metallic-roughness texture.
        * @details Type Property::STRING.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       METALLIC_ROUGHNESS_URL,
 
       /**
        * @brief Property for the metallic factor of the material surface.
        * @details Type Property::FLOAT.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       METALLIC_FACTOR,
 
       /**
        * @brief Property for the roughness factor of the material surface.
        * @details Type Property::FLOAT.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       ROUGHNESS_FACTOR,
 
       /**
        * @brief Property for the URL of the normal texture.
        * @details Type Property::STRING.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       NORMAL_URL,
 
       /**
        * @brief Property for the scale factor applied to normal vectors.
        * @details Type Property::FLOAT.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       NORMAL_SCALE,
 
       /**
        * @brief Property for the URL of the occlusion texture.
        * @details Type Property::STRING.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       OCCLUSION_URL,
 
       /**
        * @brief Property for the occlusion strength of the material surface.
        * @details Type Property::FLOAT.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       OCCLUSION_STRENGTH,
 
       /**
        * @brief Property for the URL of the emissive texture.
        * @details Type Property::STRING.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       EMISSIVE_URL,
 
       /**
        * @brief Emissive factor Property.
        * @details type Property::VECTOR3.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       EMISSIVE_FACTOR,
 
       /**
        * @brief Alpha mode Property.
        * @details type Property::INTEGER.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       ALPHA_MODE,
 
       /**
        * @brief Alpha cutoff Property.
        * @details type Property::FLOAT.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       ALPHA_CUTOFF,
 
       /**
        * @brief Double sided Property.
        * @details type Property::BOOLEAN.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       DOUBLE_SIDED,
 
       /**
-       *@brief Index of refraction (IOR) of the material surface
-       *@details type Property::FLOAT
-       * @SINCE_2_2.99
+       * @brief Index of refraction (IOR) of the material surface
+       * @details type Property::FLOAT
+       * @SINCE_2_2.22
        */
       IOR,
 
       /**
        * @brief Property for the URL of the specular texture.
        * @details Type Property::STRING.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       SPECULAR_URL,
 
       /**
-       *@brief Property for the specular factor of the material surface.
-       *@details Type Property::FLOAT.
-       * @SINCE_2_2.99
+       * @brief Property for the specular factor of the material surface.
+       * @details Type Property::FLOAT.
+       * @SINCE_2_2.22
        */
       SPECULAR_FACTOR,
 
       /**
        * @brief Property for the URL of the specular color texture.
        * @details Type Property::STRING.
-       * @SINCE_2_2.99
+       * @SINCE_2_2.22
        */
       SPECULAR_COLOR_URL,
 
       /**
-       *@brief Property for the specular color factor of the material surface.
-       *@details Type Property::VECTOR3.
-       * @SINCE_2_2.99
+       * @brief Property for the specular color factor of the material surface.
+       * @details Type Property::VECTOR3.
+       * @SINCE_2_2.22
        */
       SPECULAR_COLOR_FACTOR,
+
+      /**
+       * @brief Property to define rendering order.
+       * @details Depth index is used to define rendering order. This property
+       * is compatible with Dali::Renderer::Property::DepthIndex. Basically,
+       * a Renderer that has smaller depth index is rendered earlier.
+       * In the ordinary DALI UI components has 0 as depth index by default.
+       * (For the case of Toolkit::Control, its renderer has depth index
+       * value between [-20, 20] as fallowing the renderer's purpose)
+       *
+       * In the Scene3D cases, the rendering order of each Renderer may need
+       * to be manually defined to match scene developer's intent.
+       * Scene3D::DepthIndex::Ranges could be used to adjust rendering order
+       * between 3D Scene content.
+       * Or it also could be used to manage UI component in 3D Scene independently.
+       *
+       * Changing the depth index only affects the rendering order, and does not
+       * mean that objects drawn later will be drawn on top. To compute final
+       * rendering order, whether the object is opaque or non-opaque takes precedence
+       * over the depth index. Changing the rendering order among translucent objects
+       * has a significant impact on the rendering results.
+       */
+      DEPTH_INDEX,
     };
   };
 
@@ -233,49 +256,49 @@ public:
   {
     /**
      * @brief Base Color Texture Property.
-     * @SINCE_2_2.99
+     * @SINCE_2_2.22
      * @note This texture represents the base color of the material. In most cases, this will be the diffuse color of the material.
      */
     BASE_COLOR,
 
     /**
      * @brief Metallic Roughness Texture Property.
-     * @SINCE_2_2.99
+     * @SINCE_2_2.22
      * @note This texture represents the metallicness and roughness of the material. This texture can be used to make the material look more metallic or rough.
      */
     METALLIC_ROUGHNESS,
 
     /**
      * @brief Normal Texture Property.
-     * @SINCE_2_2.99
+     * @SINCE_2_2.22
      * @note This texture represents the surface of the material. This texture can be used to make the surface of the material look smooth or rough.
      */
     NORMAL,
 
     /**
      * @brief Occlusion Texture Property.
-     * @SINCE_2_2.99
+     * @SINCE_2_2.22
      * @note This texture represents the depth of the material. This texture can be used to make the material look more three-dimensional.
      */
     OCCLUSION,
 
     /**
      * @brief Emissive Texture Property.
-     * @SINCE_2_2.99
+     * @SINCE_2_2.22
      * @note This texture makes the material look like it's emitting light. This texture can be used to make the material look like it's glowing.
      */
     EMISSIVE,
 
     /**
      * @brief Specular Texture Property.
-     * @SINCE_2_2.99
+     * @SINCE_2_2.22
      * @note This texture represents the specular reflection of the material. This texture can be used to make the material look more reflective.
      */
     SPECULAR,
 
     /**
      * @brief Specular Color Texture Property.
-     * @SINCE_2_2.99
+     * @SINCE_2_2.22
      * @note This texture represents the color of the specular reflection of the material. This texture can be used to set the color of the specular reflection of the material.
      */
     SPECULAR_COLOR,
@@ -285,19 +308,19 @@ public:
   {
     /**
      * @brief This indicates that the material is fully opaque and that the alpha value should be ignored.
-     * @SINCE_2_2.99
+     * @SINCE_2_2.22
      */
     OPAQUE,
 
     /**
      * @brief This indicates that the material is either fully opaque or fully transparent depending on the alpha value. The alpha value is used to mask out areas of the material that should be transparent.
-     * @SINCE_2_2.99
+     * @SINCE_2_2.22
      */
     MASK,
 
     /**
      * @brief This indicates that the material is transparent and that the alpha value should be used to blend the material with the background.
-     * @SINCE_2_2.99
+     * @SINCE_2_2.22
      */
     BLEND,
   };
@@ -306,7 +329,7 @@ public: // Creation & Destruction
   /**
    * @brief Create an initialized Material.
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    * @return A handle to a newly allocated Dali resource
    */
   static Material New();
@@ -317,7 +340,7 @@ public: // Creation & Destruction
    * Only derived versions can be instantiated. Calling member
    * functions with an uninitialized Dali::Object is not allowed.
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    */
   Material();
 
@@ -326,14 +349,14 @@ public: // Creation & Destruction
    *
    * This is non-virtual since derived Handle types must not contain data or virtual methods.
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    */
   ~Material();
 
   /**
    * @brief Copy constructor.
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    * @param[in] material Handle to an object
    */
   Material(const Material& material);
@@ -341,7 +364,7 @@ public: // Creation & Destruction
   /**
    * @brief Move constructor
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    * @param[in] rhs A reference to the moved handle
    */
   Material(Material&& rhs);
@@ -349,7 +372,7 @@ public: // Creation & Destruction
   /**
    * @brief Assignment operator.
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    * @param[in] material Handle to an object
    * @return reference to this
    */
@@ -358,7 +381,7 @@ public: // Creation & Destruction
   /**
    * @brief Move assignment
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    * @param[in] rhs A reference to the moved handle
    * @return A reference to this
    */
@@ -370,7 +393,7 @@ public: // Creation & Destruction
    * If handle points to a Material, the downcast produces valid handle.
    * If not, the returned handle is left uninitialized.
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    * @param[in] handle Handle to an object
    * @return Handle to a Material or an uninitialized handle
    */
@@ -381,7 +404,7 @@ public: // Public Method
    * @brief Sets the value of an existing property.
    * @note BaseHandle is not subclass of Handle. So this API is not use Handle.SetProperty
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    * @param[in] index The index of the property
    * @param[in] propertyValue The new value of the property
    */
@@ -391,7 +414,7 @@ public: // Public Method
    * @brief Retrieves a property value.
    * @note BaseHandle is not subclass of Handle. So this API is not use Handle.SetProperty
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    * @param[in] index The index of the property
    * @return The property value
    * @note This returns the value set by SetProperty() or the animation target value if it is being animated.
@@ -401,7 +424,7 @@ public: // Public Method
   /**
    * @brief Convenience function for obtaining a property of a known type.
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    * @param[in] index The index of the property
    * @return The property value
    * @pre The property types match i.e. PropertyTypes::Get<T>() is equal to GetPropertyType(index).
@@ -418,7 +441,7 @@ public: // Public Method
   /**
    * @brief Sets the texture for a given texture type.
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    * @param[in] index The texture type index
    * @param[in] texture The texture to set.
    */
@@ -427,7 +450,7 @@ public: // Public Method
   /**
    * @brief Gets the texture for a given texture type.
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    * @param[in] index The texture type index
    * @return The texture at the given index.
    */
@@ -436,7 +459,7 @@ public: // Public Method
   /**
    * @brief Sets the sampler for a given texture type.
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    * @param[in] index The texture type index
    * @param[in] sampler The sampler to use for this texture type
    */
@@ -445,7 +468,7 @@ public: // Public Method
   /**
    * @brief Gets the sampler for a given texture type.
    *
-   * @SINCE_2_2.99
+   * @SINCE_2_2.22
    * @param[in] index The texture type index
    * @return The sampler used for this texture type
    */