Crazy Eddie's GUI System  0.8.4
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
Shader.h
1 /***********************************************************************
2 created: Wed, 8th Feb 2012
3 author: Lukas E Meindl
4 *************************************************************************/
5 /***************************************************************************
6 * Copyright (C) 2004 - 2012 Paul D Turner & The CEGUI Development Team
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining
9 * a copy of this software and associated documentation files (the
10 * "Software"), to deal in the Software without restriction, including
11 * without limitation the rights to use, copy, modify, merge, publish,
12 * distribute, sublicense, and/or sell copies of the Software, and to
13 * permit persons to whom the Software is furnished to do so, subject to
14 * the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be
17 * included in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
24 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
25 * OTHER DEALINGS IN THE SOFTWARE.
26 ***************************************************************************/
27 #ifndef _CEGUIOpenGL3Shader_h_
28 #define _CEGUIOpenGL3Shader_h_
29 
30 #include "CEGUI/Exceptions.h"
31 #include "RendererBase.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 {
42 class OPENGL_GUIRENDERER_API OpenGL3Shader :
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