Crazy Eddie's GUI System  0.8.1
 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 <string>
33 
34 #if defined(_MSC_VER)
35 # pragma warning(push)
36 # pragma warning(disable : 4251)
37 #endif
38 
39 // Start of CEGUI namespace section
40 namespace CEGUI
41 {
43  public AllocatedObject<OpenGL3Shader>
44 {
45 public:
46 
51  OpenGL3Shader(const std::string& vertex_shader_source,
52  const std::string& fragment_shader_source);
53 
54  ~OpenGL3Shader();
55 
60  void bind() const;
61 
66  void unbind() const;
67 
72  GLuint getAttribLocation(const std::string &name) const;
73 
78  GLuint getUniformLocation(const std::string &name) const;
79 
85  void bindFragDataLocation(const std::string &name);
86 
87  bool isCreatedSuccessfully();
88 
89  void link();
90 
91 private:
92  GLuint compile(GLuint type, const std::string &source);
93 
94  void outputShaderLog(GLuint shader);
95  void outputProgramLog(GLuint program);
96 
97  std::string d_shaderName;
98  bool d_createdSucessfully;
99 
100  GLuint d_vertexShader;
101  GLuint d_fragmentShader;
102  GLuint d_geometryShader;
103  GLuint d_program;
104 };
105 
106 #define STRINGIFY(x) #x
107 #define TOSTRING(x) STRINGIFY(x)
108 #define AT __FILE__ ":" TOSTRING(__LINE__)
109 #define checkGLErrors() getGLErrors(AT)
110 
115 void getGLErrors(const char *location);
116 
117 }
118 
119 #endif
120