Changes following "Remove Sampler scene object"
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / atlas-manager / atlas-manager.h
index 9263ea4..6d41419 100644 (file)
@@ -20,9 +20,9 @@
 // EXTERNAL INCLUDES
 #include <stdint.h>
 #include <dali/public-api/common/dali-vector.h>
-#include <dali/public-api/geometry/mesh-data.h>
-#include <dali/public-api/images/atlas.h>
 #include <dali/public-api/images/buffer-image.h>
+#include <dali/devel-api/images/atlas.h>
+#include <dali/devel-api/rendering/material.h>
 
 namespace Dali
 {
@@ -160,26 +160,51 @@ public:
   typedef SizeType ImageId;
   static const bool MESH_OPTIMIZE = true;
 
+  struct AtlasSize
+  {
+    SizeType mWidth;              ///< width of the atlas in pixels
+    SizeType mHeight;             ///< height of the atlas in pixels
+    SizeType mBlockWidth;         ///< width of a block in pixels
+    SizeType mBlockHeight;        ///< height of a block in pixels
+  };
+
   /**
    * Metrics structures to describe Atlas Manager state
    *
    */
   struct AtlasMetricsEntry
   {
-    SizeType mWidth;                 // width of the atlas in pixels
-    SizeType mHeight;;               // height of the atlas in pixels
-    SizeType mBlockWidth;            // width of a block in pixels
-    SizeType mBlockHeight;           // height of a block in pixels
-    SizeType mBlocksUsed;            // number of blocks used in the atlas
-    SizeType mTotalBlocks;           // total blocks used by atlas
-    Pixel::Format mPixelFormat;      // pixel format of the atlas
+    AtlasSize mSize;                 ///< size of atlas and blocks
+    SizeType mBlocksUsed;            ///< number of blocks used in the atlas
+    SizeType mTotalBlocks;           ///< total blocks used by atlas
+    Pixel::Format mPixelFormat;      ///< pixel format of the atlas
   };
 
   struct Metrics
   {
-    SizeType mAtlasCount;                               // number of atlases
-    SizeType mTextureMemoryUsed;                        // texture memory used by atlases
-    Dali::Vector< AtlasMetricsEntry > mAtlasMetrics;    // container of atlas information
+    Metrics()
+    : mAtlasCount( 0u ),
+      mTextureMemoryUsed( 0u )
+    {}
+
+    ~Metrics()
+    {}
+
+    SizeType mAtlasCount;                               ///< number of atlases
+    SizeType mTextureMemoryUsed;                        ///< texture memory used by atlases
+    Dali::Vector< AtlasMetricsEntry > mAtlasMetrics;    ///< container of atlas information
+  };
+
+  struct Vertex2D
+  {
+    Vector2 mPosition;
+    Vector2 mTexCoords;
+  };
+
+  struct Mesh2D
+  {
+    Vector< Vertex2D > mVertices;
+    Vector< unsigned int> mIndices;
   };
 
   /**
@@ -216,8 +241,8 @@ public:
    */
   struct AtlasSlot
   {
-    ImageId mImageId;                           // Id of stored Image
-    AtlasId mAtlasId;                           // Id of Atlas containing this slot
+    ImageId mImageId;                           ///< Id of stored Image
+    AtlasId mAtlasId;                           ///< Id of Atlas containing this slot
   };
 
   typedef Dali::Vector< AtlasManager::AtlasSlot > slotContainer;
@@ -225,19 +250,12 @@ public:
   /**
    * @brief Create a blank atlas of specific dimensions and pixel format with a certain block size
    *
-   * @param[in] width desired atlas width in pixels
-   * @param[in] height desired atlas height in pixels
-   * @param[in] blockWidth block width to use in atlas in pixels
-   * @param[in] blockHeight block height to use in atlas in pixels
+   * @param[in] size desired atlas dimensions
    * @param[in] pixelformat format of a pixel in atlas
    *
    * @return atlas Id
    */
-  AtlasId CreateAtlas(  SizeType width,
-                        SizeType height,
-                        SizeType blockWidth,
-                        SizeType blockHeight,
-                        Pixel::Format pixelformat = Pixel::RGBA8888 );
+  AtlasId CreateAtlas( const AtlasSize& size, Pixel::Format pixelformat = Pixel::RGBA8888 );
 
   /**
    * @brief Set the policy on failure to add an image to an atlas
@@ -276,10 +294,12 @@ public:
    * @param[in] id Image Id returned in the AtlasSlot from the add operation
    * @param[in] position position of the resulting mesh in model space
    * @param[out] mesh Mesh Data Object to populate with mesh data
+   * @param[in] addReference Whether to increase the internal reference count for image or not
    */
   void GenerateMeshData( ImageId id,
                          const Vector2& position,
-                         MeshData& mesh );
+                         Mesh2D& mesh,
+                         bool addReference = true );
 
   /**
    * @brief Append second mesh to the first mesh
@@ -288,21 +308,8 @@ public:
    * @param[in] second Second mesh
    * @param[in] optimize should we optimize vertex data
    */
-  void StitchMesh( MeshData& first,
-                   const MeshData& second,
-                   bool optimize = false );
-
-  /**
-   * @brief Combine two meshes, outputting the result into a new mesh
-   *
-   * @param[in] first First mesh
-   * @param[in] second Second mesh
-   * @param[in] optimize should we optimize vertex data
-   * @param[out] out resulting mesh
-   */
-  void StitchMesh( const MeshData& first,
-                   const MeshData& second,
-                   MeshData& out,
+  void StitchMesh( Mesh2D& first,
+                   const Mesh2D& second,
                    bool optimize = false );
 
   /**
@@ -322,24 +329,14 @@ public:
    * @return Atlas Id
    */
   AtlasId GetAtlas( ImageId id );
-
-  /**
-   * @brief Get the size of the blocks used in an atlas
-   *
-   * @param[in] atlas AtlasId
-   *
-   * @return width and height of the blocks used
-   */
-  Vector2 GetBlockSize( AtlasId atlas );
-
   /**
    * @brief Get the current size of an atlas
    *
    * @param[in] atlas AtlasId
    *
-   * @return width and height of the atlas
+   * @return AtlasSize structure for the atlas
    */
-  Vector2 GetAtlasSize( AtlasId atlas );
+  const AtlasSize& GetAtlasSize( AtlasId atlas );
 
   /**
    * @brief Get the number of blocks available in an atlas
@@ -353,12 +350,11 @@ public:
   /**
    * @brief Sets the pixel area of any new atlas and also the individual block size
    *
-   * @param[in] size pixel area of atlas
+   * @param[in] size Atlas size structure
    *
    * @param blockSize pixel area in atlas for a block
    */
-  void SetNewAtlasSize( const Vector2& size,
-                        const Vector2& blockSize );
+  void SetNewAtlasSize( const AtlasSize& size );
 
   /**
    * @brief Get the number of atlases created
@@ -383,6 +379,23 @@ public:
    */
   void GetMetrics( Metrics& metrics );
 
+  /**
+   * @brief Get Material used by atlas
+   *
+   * @param atlas[in] atlas AtlasId
+   *
+   * @return Material used by atlas
+   */
+  Material GetMaterial( AtlasId atlas ) const;
+
+ /**
+   * @brief Get Image used by atlas
+   *
+   * @param atlas[in] atlas AtlasId
+   *
+   * @return Sampler used by atlas
+   */
+  Image GetImage( AtlasId atlas ) const;
 private:
 
   explicit DALI_INTERNAL AtlasManager(Internal::AtlasManager *impl);
@@ -393,4 +406,4 @@ private:
 
 } // namespace Dali
 
-#endif // __DALI_TOOLKIT_ATLAS_MANAGER_H__
\ No newline at end of file
+#endif // __DALI_TOOLKIT_ATLAS_MANAGER_H__