Crazy Eddie's GUI System  0.8.4
Shader.h
00001 /***********************************************************************
00002 created:    Wed, 8th Feb 2012
00003 author:     Lukas E Meindl
00004 *************************************************************************/
00005 /***************************************************************************
00006 *   Copyright (C) 2004 - 2012 Paul D Turner & The CEGUI Development Team
00007 *
00008 *   Permission is hereby granted, free of charge, to any person obtaining
00009 *   a copy of this software and associated documentation files (the
00010 *   "Software"), to deal in the Software without restriction, including
00011 *   without limitation the rights to use, copy, modify, merge, publish,
00012 *   distribute, sublicense, and/or sell copies of the Software, and to
00013 *   permit persons to whom the Software is furnished to do so, subject to
00014 *   the following conditions:
00015 *
00016 *   The above copyright notice and this permission notice shall be
00017 *   included in all copies or substantial portions of the Software.
00018 *
00019 *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00020 *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00021 *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
00022 *   IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
00023 *   OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
00024 *   ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
00025 *   OTHER DEALINGS IN THE SOFTWARE.
00026 ***************************************************************************/
00027 #ifndef _CEGUIOpenGL3Shader_h_
00028 #define _CEGUIOpenGL3Shader_h_
00029 
00030 #include "CEGUI/Exceptions.h"
00031 #include "RendererBase.h"
00032 #include <string>
00033 
00034 #if defined(_MSC_VER)
00035 #   pragma warning(push)
00036 #   pragma warning(disable : 4251)
00037 #endif
00038 
00039 // Start of CEGUI namespace section
00040 namespace CEGUI
00041 {
00042 class OPENGL_GUIRENDERER_API OpenGL3Shader :
00043     public AllocatedObject<OpenGL3Shader>
00044 {
00045 public:
00046 
00051     OpenGL3Shader(const std::string& vertex_shader_source,
00052                   const std::string& fragment_shader_source);
00053 
00054     ~OpenGL3Shader();
00055 
00060     void bind() const;
00061 
00066     void unbind() const;
00067 
00072     GLuint getAttribLocation(const std::string &name) const;
00073 
00078     GLuint getUniformLocation(const std::string &name) const;
00079 
00085     void bindFragDataLocation(const std::string &name);
00086 
00087     bool isCreatedSuccessfully();
00088 
00089     void link();
00090 
00091 private:
00092     GLuint compile(GLuint type, const std::string &source);
00093 
00094     void outputShaderLog(GLuint shader);
00095     void outputProgramLog(GLuint program);
00096 
00097     std::string d_shaderName;
00098     bool d_createdSucessfully;
00099 
00100     GLuint d_vertexShader;
00101     GLuint d_fragmentShader;
00102     GLuint d_geometryShader;
00103     GLuint d_program;
00104 };
00105 
00106 #define STRINGIFY(x) #x
00107 #define TOSTRING(x) STRINGIFY(x)
00108 #define AT __FILE__ ":" TOSTRING(__LINE__)
00109 #define checkGLErrors() getGLErrors(AT)
00110 
00115 void getGLErrors(const char *location);
00116 
00117 }
00118 
00119 #endif
00120 
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends