Fix multiple primitive skinning error
[platform/core/uifw/dali-toolkit.git] / dali-scene3d / public-api / loader / node-definition.h
index d713ed5..02d056f 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef DALI_SCENE3D_LOADER_NODE_DEFINITION_H_
 #define DALI_SCENE3D_LOADER_NODE_DEFINITION_H_
 /*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * 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.
  *
  */
 
-// INTERNAL INCLUDES
-#include "dali-scene3d/public-api/loader/customization.h"
-#include "dali-scene3d/public-api/loader/matrix-stack.h"
-#include "dali-scene3d/public-api/loader/resource-bundle.h"
-
 // EXTERNAL INCLUDES
+#include <dali/public-api/actors/actor.h>
+#include <dali/public-api/math/matrix.h>
+#include <dali/public-api/math/quaternion.h>
+#include <dali/public-api/math/vector4.h>
 #include <functional>
 #include <memory>
 #include <string>
-#include "dali/public-api/actors/actor.h"
-#include "dali/public-api/math/matrix.h"
-#include "dali/public-api/math/quaternion.h"
-#include "dali/public-api/math/vector4.h"
+
+// INTERNAL INCLUDES
+#include <dali-scene3d/public-api/loader/customization.h>
+#include <dali-scene3d/public-api/loader/matrix-stack.h>
+#include <dali-scene3d/public-api/loader/resource-bundle.h>
+#include <dali-scene3d/public-api/model-components/model-node.h>
 
 namespace Dali
 {
@@ -101,12 +102,13 @@ struct DALI_SCENE3D_API Transforms
  */
 struct DALI_SCENE3D_API SkinningShaderConfigurationRequest
 {
-  Index  mSkeletonIdx;
-  Shader mShader;
+  Index          mSkeletonIdx;
+  Shader         mShader;
+  ModelPrimitive mPrimitive;
 
   bool operator<(const SkinningShaderConfigurationRequest& other) const
   {
-    return mShader < other.mShader;
+    return mShader < other.mShader || (mShader == other.mShader && mPrimitive < other.mPrimitive);
   }
 };
 
@@ -115,13 +117,14 @@ struct DALI_SCENE3D_API SkinningShaderConfigurationRequest
  */
 struct DALI_SCENE3D_API BlendshapeShaderConfigurationRequest
 {
-  std::string mNodeName;
-  Index       mMeshIdx;
-  Shader      mShader;
+  std::string    mNodeName;
+  Index          mMeshIdx;
+  Shader         mShader;
+  ModelPrimitive mPrimitive;
 
   bool operator<(const BlendshapeShaderConfigurationRequest& other) const
   {
-    return mShader < other.mShader;
+    return mShader < other.mShader || (mShader == other.mShader && mPrimitive < other.mPrimitive);
   }
 };
 
@@ -147,8 +150,8 @@ public: // TYPES
   struct CreateParams
   {
   public: // input
-    const ResourceBundle& mResources;
-    Transforms&           mXforms;
+    ResourceBundle& mResources;
+    Transforms&     mXforms;
 
   public: // output
     std::vector<ConstraintRequest>                    mConstrainables;
@@ -167,7 +170,7 @@ public: // TYPES
     virtual bool GetExtents(const ResourceBundle& resources, Vector3& min, Vector3& max) const;
     virtual void RegisterResources(IResourceReceiver& receiver) const;
     virtual void ReflectResources(IResourceReflector& reflector);
-    virtual void OnCreate(const NodeDefinition& node, CreateParams& params, Actor& actor) const;
+    virtual void OnCreate(const NodeDefinition& nodeDefinition, CreateParams& params, ModelNode& node) const;
   };
 
   struct CustomizationDefinition
@@ -215,10 +218,10 @@ public: // TYPES
 
 public: // METHODS
   /**
-   * @brief Creates a DALi Actor from this definition only.
+   * @brief Creates a ModelNode from this definition only.
    * @note Not recursive.
    */
-  Actor CreateActor(CreateParams& params);
+  ModelNode CreateModelNode(CreateParams& params);
 
   /**
    * @brief Gets local space matrix of this node
@@ -249,8 +252,15 @@ public: // METHODS
    */
   static std::string_view GetIblYDirectionUniformName();
 
+  /**
+   * @brief Retrieves ibl MaxLod uniform name.
+   * This uniform name can be used to set max lod of ibl in shader.
+   * @return std::string_view of the Max Lod uniform name.
+   */
+  static std::string_view GetIblMaxLodUniformName();
+
 public: // DATA
-  static const std::string ORIGINAL_MATRIX_PROPERTY_NAME;
+  static const char* ORIGINAL_MATRIX_PROPERTY_NAME;
 
   std::string mName;
   uint32_t    mNodeId = INVALID_INDEX;
@@ -282,7 +292,7 @@ public: // METHODS
   bool GetExtents(const ResourceBundle& resources, Vector3& min, Vector3& max) const override;
   void RegisterResources(IResourceReceiver& receiver) const override;
   void ReflectResources(IResourceReflector& reflector) override;
-  void OnCreate(const NodeDefinition& node, NodeDefinition::CreateParams& params, Actor& actor) const override;
+  void OnCreate(const NodeDefinition& nodeDefinition, NodeDefinition::CreateParams& params, ModelNode& node) const override;
 };
 
 /**
@@ -300,7 +310,7 @@ public: // DATA
 public: // METHODS
   static void GetEndVectorWithDiffAngle(float startAngle, float endAngle, Vector2& endVector);
 
-  void OnCreate(const NodeDefinition& node, NodeDefinition::CreateParams& params, Actor& actor) const override;
+  void OnCreate(const NodeDefinition& nodeDefinition, NodeDefinition::CreateParams& params, ModelNode& node) const override;
 };
 
 } // namespace Loader