Crazy Eddie's GUI System  0.8.5
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 
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 
Definition: MemoryAllocatedObject.h:109
Main namespace for Crazy Eddie's GUI Library.
Definition: arch_overview.dox:1
void getGLErrors(const char *location)
Query OpenGL errors and process them in CEGUI.
Definition: Shader.h:43