Crazy Eddie's GUI System 0.8.7
Loading...
Searching...
No Matches
Shader.h
1/***********************************************************************
2created: Wed, 8th Feb 2012
3author: 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
40namespace CEGUI
41{
42
43class OPENGL_GUIRENDERER_API OpenGL3Shader :
44 public AllocatedObject<OpenGL3Shader>
45{
46public:
47
52 OpenGL3Shader(const std::string& vertex_shader_source,
53 const std::string& fragment_shader_source);
54
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
92private:
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
116void getGLErrors(const char *location);
117
118}
119
120#endif
121
Definition MemoryAllocatedObject.h:110
Definition Shader.h:45
void bindFragDataLocation(const std::string &name)
Defines the name of the variable inside the shader which represents the final color for each fragment...
void bind() const
Bind the shader to the OGL state-machine.
void unbind() const
Unbind the shader.
OpenGL3Shader(const std::string &vertex_shader_source, const std::string &fragment_shader_source)
Creates and loads shader programs from the two strings supplied to it.
GLuint getAttribLocation(const std::string &name) const
Query the location of a vertex attribute inside the shader.
GLuint getUniformLocation(const std::string &name) const
Query the location of a uniform variable inside the shader.
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.