Crazy Eddie's GUI System  0.8.3
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
Shader.h
1 /***********************************************************************
2 filename: OpenGL3Shader.h
3 created: Wed, 8th Feb 2012
4 author: Lukas E Meindl
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 _CEGUIOpenGL3Shader_h_
29 #define _CEGUIOpenGL3Shader_h_
30 
31 #include "CEGUI/Exceptions.h"
32 #include "RendererBase.h"
33 #include <string>
34 
35 #if defined(_MSC_VER)
36 # pragma warning(push)
37 # pragma warning(disable : 4251)
38 #endif
39 
40 // Start of CEGUI namespace section
41 namespace CEGUI
42 {
43 class OPENGL_GUIRENDERER_API OpenGL3Shader :
44  public AllocatedObject<OpenGL3Shader>
45 {
46 public:
47 
52  OpenGL3Shader(const std::string& vertex_shader_source,
53  const std::string& fragment_shader_source);
54 
55  ~OpenGL3Shader();
56 
61  void bind() const;
62 
67  void unbind() const;
68 
73  GLuint getAttribLocation(const std::string &name) const;
74 
79  GLuint getUniformLocation(const std::string &name) const;
80 
86  void bindFragDataLocation(const std::string &name);
87 
88  bool isCreatedSuccessfully();
89 
90  void link();
91 
92 private:
93  GLuint compile(GLuint type, const std::string &source);
94 
95  void outputShaderLog(GLuint shader);
96  void outputProgramLog(GLuint program);
97 
98  std::string d_shaderName;
99  bool d_createdSucessfully;
100 
101  GLuint d_vertexShader;
102  GLuint d_fragmentShader;
103  GLuint d_geometryShader;
104  GLuint d_program;
105 };
106 
107 #define STRINGIFY(x) #x
108 #define TOSTRING(x) STRINGIFY(x)
109 #define AT __FILE__ ":" TOSTRING(__LINE__)
110 #define checkGLErrors() getGLErrors(AT)
111 
116 void getGLErrors(const char *location);
117 
118 }
119 
120 #endif
121