Crazy Eddie's GUI System  0.8.1
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
GL3Renderer.h
1 /***********************************************************************
2  filename: CEGUIOpenGL3Renderer.h
3  created: Wed, 8th Feb 2012
4  author: Lukas E Meindl (based on code by Paul D Turner)
5 *************************************************************************/
6 /***************************************************************************
7  * Copyright (C) 2004 - 2012 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 _CEGUIOpenGL3Renderer_h_
29 #define _CEGUIOpenGL3Renderer_h_
30 
31 #include "RendererBase.h"
32 
33 namespace CEGUI
34 {
35  class OpenGL3Shader;
36  class OpenGL3ShaderManager;
37  class OpenGL3StateChangeWrapper;
38 
43 class OPENGL_GUIRENDERER_API OpenGL3Renderer : public OpenGLRendererBase
44 {
45 public:
65  static OpenGL3Renderer& bootstrapSystem(const int abi = CEGUI_VERSION_ABI);
66 
89  static OpenGL3Renderer& bootstrapSystem(const Sizef& display_size,
90  const int abi = CEGUI_VERSION_ABI);
91 
107  static void destroySystem();
108 
120  static OpenGL3Renderer& create(const int abi = CEGUI_VERSION_ABI);
121 
136  static OpenGL3Renderer& create(const Sizef& display_size,
137  const int abi = CEGUI_VERSION_ABI);
138 
146  static void destroy(OpenGL3Renderer& renderer);
147 
156  OpenGL3Shader*& getShaderStandard();
157 
166  GLint getShaderStandardPositionLoc();
167 
168 
178  GLint getShaderStandardTexCoordLoc();
179 
180 
189  GLint getShaderStandardColourLoc();
190 
199  GLint getShaderStandardMatrixUniformLoc();
200 
209  OpenGL3StateChangeWrapper* getOpenGLStateChanger();
210 
211  // base class overrides / abstract function implementations
212  void beginRendering();
213  void endRendering();
214  Sizef getAdjustedTextureSize(const Sizef& sz) const;
215  bool isS3TCSupported() const;
216  void setupRenderingBlendMode(const BlendMode mode,
217  const bool force = false);
218 
219 private:
220  OpenGLGeometryBufferBase* createGeometryBuffer_impl();
221  TextureTarget* createTextureTarget_impl();
222 
223  void initialiseRendererIDString();
224 
233  OpenGL3Renderer();
234 
246  OpenGL3Renderer(const Sizef& display_size);
247 
248  void initialiseOpenGLShaders();
249  void initialiseGLExtensions();
250 
255  virtual ~OpenGL3Renderer();
256 
258  void initialiseTextureTargetFactory();
259 
261  void setupExtraStates();
262 
264  OpenGL3Shader* d_shaderStandard;
266  GLint d_shaderStandardPosLoc;
268  GLint d_shaderStandardTexCoordLoc;
270  GLint d_shaderStandardColourLoc;
272  GLint d_shaderStandardMatrixLoc;
274  OpenGL3StateChangeWrapper* d_openGLStateChanger;
275  OpenGL3ShaderManager* d_shaderManager;
277  bool d_s3tcSupported;
279  OGLTextureTargetFactory* d_textureTargetFactory;
280 };
281 
282 }
283 
284 #endif
285