00001 /* 00002 * OpenGL shader class header 00003 * 00004 * This file is part of the "SoftPixel Engine" (Copyright (c) 2008 by Lukas Hermanns) 00005 * See "SoftPixelEngine.hpp" for license information. 00006 */ 00007 00008 #ifndef __SP_OPENGL_SHADERCLASS_H__ 00009 #define __SP_OPENGL_SHADERCLASS_H__ 00010 00011 00012 #include "Base/spStandard.hpp" 00013 00014 #if defined(SP_COMPILE_WITH_OPENGL) || defined(SP_COMPILE_WITH_OPENGLES2) 00015 00016 00017 #include "RenderSystem/spShaderProgram.hpp" 00018 #include "RenderSystem/OpenGL/spOpenGLCoreHeader.hpp" 00019 #include "RenderSystem/OpenGLES/spOpenGLESFunctionsARB.hpp" 00020 00021 00022 namespace sp 00023 { 00024 namespace video 00025 { 00026 00027 00028 class OpenGLShader; 00029 00030 class SP_EXPORT OpenGLShaderClass : public ShaderClass 00031 { 00032 00033 public: 00034 00035 OpenGLShaderClass(VertexFormat* VertexInputLayout = 0); 00036 ~OpenGLShaderClass(); 00037 00038 /* === Functions === */ 00039 00040 void bind(const scene::MaterialNode* Object = 0); 00041 void unbind(); 00042 00043 bool link(); 00044 00045 private: 00046 00047 friend class OpenGLShader; 00048 friend class OpenGLConstantBuffer; 00049 friend class GLProgrammableFunctionPipeline; 00050 00051 /* === Functions === */ 00052 00053 void deleteShaderObject(Shader* ShaderObject); 00054 bool checkLinkingErrors(); 00055 00056 bool setupUniforms(); 00057 bool setupUniformBlocks(); 00058 00059 void setupVertexFormat(VertexFormat* VertexInputLayout); 00060 00061 void addShaderConstant(const c8* Name, const GLenum Type, u32 Count, s32 Location); 00062 00063 /* === Members === */ 00064 00065 GLuint ProgramObject_; 00066 00067 VertexFormat* VertexInputLayout_; 00068 00069 static GLuint LastProgramObject_; 00070 00071 }; 00072 00073 00074 } // /namespace scene 00075 00076 } // /namespace sp 00077 00078 00079 #endif 00080 00081 #endif 00082 00083 00084 00085 // ================================================================================