Crazy Eddie's GUI System  0.8.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
RendererModules/OpenGL/Texture.h
1 /***********************************************************************
2  filename: CEGUIOpenGLTexture.h
3  created: Sun Jan 11 2009
4  author: Paul D Turner
5 *************************************************************************/
6 /***************************************************************************
7  * Copyright (C) 2004 - 2009 Paul D Turner & The CEGUI Development Team
8  *
9  * Permission is hereby granted, free of charge, to any person obtaining
10  * a copy of this software and associated documentation files (the
11  * "Software"), to deal in the Software without restriction, including
12  * without limitation the rights to use, copy, modify, merge, publish,
13  * distribute, sublicense, and/or sell copies of the Software, and to
14  * permit persons to whom the Software is furnished to do so, subject to
15  * the following conditions:
16  *
17  * The above copyright notice and this permission notice shall be
18  * included in all copies or substantial portions of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23  * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
24  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
25  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
26  * OTHER DEALINGS IN THE SOFTWARE.
27  ***************************************************************************/
28 #ifndef _CEGUIOpenGLTexture_h_
29 #define _CEGUIOpenGLTexture_h_
30 
31 #include "../../Base.h"
32 #include "../../Renderer.h"
33 #include "../../Texture.h"
34 #include "CEGUI/RendererModules/OpenGL/RendererBase.h"
35 
36 #if defined(_MSC_VER)
37 # pragma warning(push)
38 # pragma warning(disable : 4251)
39 #endif
40 
41 // Start of CEGUI namespace section
42 namespace CEGUI
43 {
45 class OPENGL_GUIRENDERER_API OpenGLTexture : public Texture
46 {
47 public:
53  void setOpenGLTexture(GLuint tex, const Sizef& size);
54 
62  GLuint getOpenGLTexture() const;
63 
84  void setTextureSize(const Sizef& sz);
85 
93  void grabTexture();
94 
100  void restoreTexture();
101 
102  // implement abstract members from base class.
103  const String& getName() const;
104  const Sizef& getSize() const;
105  const Sizef& getOriginalDataSize() const;
106  const Vector2f& getTexelScaling() const;
107  void loadFromFile(const String& filename, const String& resourceGroup);
108  void loadFromMemory(const void* buffer, const Sizef& buffer_size,
109  PixelFormat pixel_format);
110  void blitFromMemory(const void* sourceData, const Rectf& area);
111  void blitToMemory(void* targetData);
112  bool isPixelFormatSupported(const PixelFormat fmt) const;
113 
114 protected:
115  // Friends (to allow construction and destruction)
117  friend Texture& OpenGLRendererBase::createTexture(const String&, const String&, const String&);
118  friend Texture& OpenGLRendererBase::createTexture(const String&, const Sizef&);
119  friend Texture& OpenGLRendererBase::createTexture(const String&, GLuint, const Sizef&);
121  friend void OpenGLRendererBase::destroyTexture(const String&);
122 
124  OpenGLTexture(OpenGLRendererBase& owner, const String& name);
126  OpenGLTexture(OpenGLRendererBase& owner, const String& name,
127  const String& filename, const String& resourceGroup);
129  OpenGLTexture(OpenGLRendererBase& owner, const String& name,
130  const Sizef& size);
132  OpenGLTexture(OpenGLRendererBase& owner, const String& name,
133  GLuint tex, const Sizef& size);
135  virtual ~OpenGLTexture();
136 
138  void generateOpenGLTexture();
139 
141  void updateCachedScaleValues();
142 
144  void cleanupOpenGLTexture();
145 
147  void initInternalPixelFormatFields(const PixelFormat fmt);
148 
150  void setTextureSize_impl(const Sizef& sz);
151 
152  void loadUncompressedTextureBuffer(const Rectf& dest_area,
153  const GLvoid* buffer) const;
154 
155  void loadCompressedTextureBuffer(const Rectf& dest_area,
156  const GLvoid* buffer) const;
157 
158  GLsizei getCompressedTextureSize(const Sizef& pixel_size) const;
159 
161  GLuint d_ogltexture;
165  uint8* d_grabBuffer;
173  const String d_name;
175  GLenum d_format;
180 };
181 
182 } // End of CEGUI namespace section
183 
184 #if defined(_MSC_VER)
185 # pragma warning(pop)
186 #endif
187 
188 #endif // end of guard _CEGUIOpenGLTexture_h_