You.i Engine
YiTextureAtlas.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_TEXTURE_ATLAS_H_
3 #define _YI_TEXTURE_ATLAS_H_
4 
5 /*****************************************************************************
6  Includes
7 ****************************************************************************/
8 #include "asset/YiAssetTexture.h"
9 #include "graphics/YiBitmap.h"
10 #include <glm/gtc/type_ptr.hpp>
11 
16 
20 typedef struct
21 {
23  void * pReference;
24  uint32_t unPage;
25  int32_t nStartX;
26  int32_t nStartY;
27  int32_t nWidth;
28  int32_t nHeight;
29  float fUV_S0;
30  float fUV_T0;
31  float fUV_S1;
32  float fUV_T1;
33  uint32_t unRefCount;
35 
37 typedef struct
38 {
39  std::vector<YI_TEXTURE_DETAILS> Textures; /* Vector of textures */
41 
42 typedef struct
43 {
45  uint32_t unPage;
46  bool bValid;
47 } YI_REGION;
48 
54 {
55 public:
57  virtual ~CYITextureAtlas();
58 
59  bool CreateNewAtlas(uint32_t unWidth, uint32_t unHeight, uint32_t unPages);
60 
61  /* Returns a region allocation based on a requested size
62  The atlas can hold anything, this method is used if
63  you are using the regioning for packing data. */
64  YI_REGION GetRegion(int32_t nWidth, int32_t nHeight);
65 
66  //Set pixels and references in a region allocation based on a requested size
67  virtual void SetRegion(ssize_t ID, void *pReference, YI_REGION Region, const uint8_t *data, const int32_t nStride);
68 
69  //Get the details of a texture region from the atlas. Increments the use count
70  virtual YI_TEXTURE_DETAILS *GetTexture(ssize_t ID, void *pReference);
71 
72  //Update the atlas, forces a GPU update
73  void UpdateAtlas();
74 
75  //Get the atlas bitmap image
76  const std::shared_ptr<CYIBitmap> GetBitmap() const;
77 
78  //Get the atlas node array
79  const std::vector<glm::ivec4> *GetNodes(uint32_t unPage) const;
80 
81  //Get the GPU texture for the atlas
82  virtual std::shared_ptr<CYIAssetTexture> GetGLTexture() const;
83 
84  const std::shared_ptr<CYIAssetTexture> GetTextureAsset()
85  {
86  return m_pTextureAsset;
87  }
88 
89  //Get the array of textures in the atlas
91 
93 
95 
96  void SetName(const CYIString &name);
97  const CYIString &GetName() const;
98 
104  float GetAtlasPercentageUsed() const;
105 
110  bool RenderAtlasToPng(const CYIString &filePath) const;
111 
115  void Reset();
116 
117 protected:
118  int32_t Fit(uint32_t unPage, uint32_t unIndex, int32_t nWidth, int32_t nHeight);
119  void Merge(uint32_t unPage);
120 
122  std::shared_ptr<CYIBitmap> m_Image;
123  std::vector<glm::ivec4> m_Nodes[4];
124  std::shared_ptr<CYIAssetTexture> m_pTextureAsset;
126  int32_t m_nWidth;
127  int32_t m_nHeight;
128  uint32_t m_unPages;
130  uint32_t m_unPixelsUsed;
132 };
133 
136 #endif // _YI_TEXTURE_ATLAS_H_
virtual ~CYITextureAtlas()
Definition: YiAssetTextureBase.h:59
std::shared_ptr< CYIBitmap > m_Image
Definition: YiTextureAtlas.h:122
Definition: YiPredef.h:234
Definition: YiTextureAtlas.h:37
void * pReference
Definition: YiTextureAtlas.h:23
const CYIString & GetName() const
Container class for Unicode strings. Conceptually, a CYIString object is a sequence of Unicode charac...
Definition: YiString.h:35
uint32_t unRefCount
Definition: YiTextureAtlas.h:33
int32_t nWidth
Definition: YiTextureAtlas.h:27
float fUV_T1
Definition: YiTextureAtlas.h:32
Class for a texture atlas.
Definition: YiTextureAtlas.h:53
virtual void SetRegion(ssize_t ID, void *pReference, YI_REGION Region, const uint8_t *data, const int32_t nStride)
YI_TEXTURE_WRAP
Definition: YiAssetTextureBase.h:40
void Merge(uint32_t unPage)
uint32_t m_unLastUpdatedSize
Definition: YiTextureAtlas.h:131
int32_t nStartY
Definition: YiTextureAtlas.h:26
Definition: YiTextureAtlas.h:42
int32_t m_nWidth
Definition: YiTextureAtlas.h:126
virtual YI_TEXTURE_DETAILS * GetTexture(ssize_t ID, void *pReference)
void SetName(const CYIString &name)
uint32_t unPage
Definition: YiTextureAtlas.h:45
void SetTextureFilter(CYIAssetTexture::YI_MIN_MAG_FILTER minificationFilter, CYIAssetTexture::YI_MIN_MAG_FILTER magnificationFilter)
CYIAssetTexture::YI_TEXTURE_CONFIG m_textureConfiguration
Definition: YiTextureAtlas.h:129
const std::shared_ptr< CYIAssetTexture > GetTextureAsset()
Definition: YiTextureAtlas.h:84
uint32_t m_unPages
Definition: YiTextureAtlas.h:128
YI_RECT_REL Area
Definition: YiTextureAtlas.h:44
ssize_t ID
Definition: YiTextureAtlas.h:22
CYIString m_name
Definition: YiTextureAtlas.h:121
YI_MIN_MAG_FILTER
Definition: YiAssetTextureBase.h:30
float fUV_S0
Definition: YiTextureAtlas.h:29
bool RenderAtlasToPng(const CYIString &filePath) const
float fUV_T0
Definition: YiTextureAtlas.h:30
int32_t nHeight
Definition: YiTextureAtlas.h:28
int32_t Fit(uint32_t unPage, uint32_t unIndex, int32_t nWidth, int32_t nHeight)
YI_LOADED_TEXTURES m_Textures
Definition: YiTextureAtlas.h:125
YI_REGION GetRegion(int32_t nWidth, int32_t nHeight)
bool CreateNewAtlas(uint32_t unWidth, uint32_t unHeight, uint32_t unPages)
const std::shared_ptr< CYIBitmap > GetBitmap() const
int32_t nStartX
Definition: YiTextureAtlas.h:25
bool bValid
Definition: YiTextureAtlas.h:46
YI_LOADED_TEXTURES * GetLoadedTextures()
int ssize_t
Definition: YiPredefWin32.h:133
std::vector< glm::ivec4 > m_Nodes[4]
Definition: YiTextureAtlas.h:123
std::shared_ptr< CYIAssetTexture > m_pTextureAsset
Definition: YiTextureAtlas.h:124
float GetAtlasPercentageUsed() const
uint32_t unPage
Definition: YiTextureAtlas.h:24
uint32_t m_unPixelsUsed
Definition: YiTextureAtlas.h:130
std::vector< YI_TEXTURE_DETAILS > Textures
Definition: YiTextureAtlas.h:39
virtual std::shared_ptr< CYIAssetTexture > GetGLTexture() const
float fUV_S1
Definition: YiTextureAtlas.h:31
Definition: YiTextureAtlas.h:20
const std::vector< glm::ivec4 > * GetNodes(uint32_t unPage) const
void SetTextureWrap(CYIAssetTexture::YI_TEXTURE_WRAP wrapS, CYIAssetTexture::YI_TEXTURE_WRAP wrapT)
int32_t m_nHeight
Definition: YiTextureAtlas.h:127