MyGUI  3.2.1
MyGUI_TextureUtility.cpp
Go to the documentation of this file.
1 /*
2  * This source file is part of MyGUI. For the latest info, see http://mygui.info/
3  * Distributed under the MIT License
4  * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5  */
6 
7 #include "MyGUI_Precompiled.h"
8 #include "MyGUI_TextureUtility.h"
9 #include "MyGUI_RenderManager.h"
10 #include "MyGUI_DataManager.h"
11 #include "MyGUI_Bitwise.h"
12 #include "MyGUI_Constants.h"
13 
14 namespace MyGUI
15 {
16 
17  namespace texture_utility
18  {
19 
20  const IntSize& getTextureSize(const std::string& _texture, bool _cache)
21  {
22  static std::string prevTexture;
23  static IntSize prevSize;
24 
25  if (prevTexture == _texture && _cache)
26  return prevSize;
27 
28  prevTexture.clear();
29  prevSize.clear();
30 
31  if (_texture.empty())
33 
35 
36  ITexture* texture = render.getTexture(_texture);
37  if (texture == nullptr)
38  {
39  if (!DataManager::getInstance().isDataExist(_texture))
40  {
41  MYGUI_LOG(Error, "Texture '" + _texture + "' not found");
43  }
44  else
45  {
46  texture = render.createTexture(_texture);
47  if (texture == nullptr)
48  {
49  MYGUI_LOG(Error, "Texture '" + _texture + "' not found");
51  }
52  texture->loadFromFile(_texture);
53  }
54  }
55 
56  prevSize = IntSize(texture->getWidth(), texture->getHeight());
57  prevTexture = _texture;
58 
59 #if MYGUI_DEBUG_MODE == 1
60  if (!Bitwise::isPO2(prevSize.width) || !Bitwise::isPO2(prevSize.height))
61  {
62  MYGUI_LOG(Warning, "Texture '" + _texture + "' have non power of two size");
63  }
64 #endif
65 
66  return prevSize;
67  }
68 
69  uint32 toColourARGB(const Colour& _colour)
70  {
71  uint32 val32 = uint8(_colour.alpha * 255);
72  val32 <<= 8;
73  val32 += uint8(_colour.red * 255);
74  val32 <<= 8;
75  val32 += uint8(_colour.green * 255);
76  val32 <<= 8;
77  val32 += uint8(_colour.blue * 255);
78  return val32;
79  }
80 
81  } // namespace texture_utility
82 
83 } // namespace MyGUI