Reflection GetSamplers() returns const ref
[platform/core/uifw/dali-adaptor.git] / dali / internal / graphics / gles-impl / gles-graphics-reflection.h
index b06fb24..06cfba1 100644 (file)
@@ -172,6 +172,13 @@ public:
    */
   [[nodiscard]] bool GetNamedUniform(const std::string& name, Dali::Graphics::UniformInfo& out) const override;
 
+  /**
+   * @brief Gets the types of all the standalone uniforms within the default uniform block.
+   *
+   * @return A vector of uniform types sorted in the same order as the uniforms in the default uniform block.
+   */
+  [[nodiscard]] std::vector<GLenum> GetStandaloneUniformTypes() const;
+
   // Sampler
 
   /**
@@ -179,7 +186,7 @@ public:
    *
    * @return A vector of the sampler uniforms
    */
-  [[nodiscard]] std::vector<Dali::Graphics::UniformInfo> GetSamplers() const override;
+  const std::vector<Dali::Graphics::UniformInfo>& GetSamplers() const override;
 
   // Language
 
@@ -192,6 +199,32 @@ public:
 
 public:
   /**
+   * @brief Extra information of uniform
+   */
+  struct UniformExtraInfo
+  {
+    UniformExtraInfo(uint32_t location, uint32_t size, uint32_t offset, uint32_t arraySize, GLenum type)
+    : location(location),
+      size(size),
+      offset(offset),
+      arraySize(arraySize),
+      type(type){};
+
+    uint32_t location;  ///< Location of uniform
+    uint32_t size;      ///< size of uniform
+    uint32_t offset;    ///< offset of uniform within UBO
+    uint32_t arraySize; ///< number of array elements (1 for non-arrays)
+    GLenum   type;      ///< type of uniform
+  };
+
+  /**
+   * @brief Returns array of additional info about standalone uniforms
+   *
+   * @return Array of internal uniform data
+   */
+  [[nodiscard]] const std::vector<UniformExtraInfo>& GetStandaloneUniformExtraInfo() const;
+
+  /**
    * @brief Build the reflection of vertex attributes
    */
   void BuildVertexAttributeReflection();
@@ -206,6 +239,11 @@ public:
    */
   void BuildUniformBlockReflection();
 
+  /**
+   * Sort the samplers by their lexical location in the frag shader source code.
+   */
+  void SortOpaques();
+
 protected:
   Reflection(Reflection&&) = default;
   Reflection& operator=(Reflection&&) = default;
@@ -221,10 +259,11 @@ private:
     Dali::Graphics::VertexInputAttributeFormat format{};
   };
 
-  std::vector<AttributeInfo>              mVertexInputAttributes; ///< List of vertex attributes
-  Graphics::UniformBlockInfo              mDefaultUniformBlock{}; ///< The emulated UBO containing all the standalone uniforms
-  std::vector<Graphics::UniformInfo>      mUniformOpaques{};      ///< List of opaque uniforms (i.e. samplers)
-  std::vector<Graphics::UniformBlockInfo> mUniformBlocks{};       ///< List of uniform blocks
+  std::vector<AttributeInfo>              mVertexInputAttributes;       ///< List of vertex attributes
+  Graphics::UniformBlockInfo              mDefaultUniformBlock{};       ///< The emulated UBO containing all the standalone uniforms
+  std::vector<Graphics::UniformInfo>      mUniformOpaques{};            ///< List of opaque uniforms (i.e. samplers)
+  std::vector<Graphics::UniformBlockInfo> mUniformBlocks{};             ///< List of uniform blocks
+  std::vector<UniformExtraInfo>           mStandaloneUniformExtraInfos; ///< List of extra information for standalone uniforms
 };
 
 } // namespace GLES