46 lines
1.0 KiB
C
46 lines
1.0 KiB
C
|
#ifndef CSHADER_H
|
||
|
#define CSHADER_H
|
||
|
|
||
|
#include <gl/glew.h>
|
||
|
#include <string>
|
||
|
|
||
|
class CShader
|
||
|
{
|
||
|
bool mVertexShaderExists;
|
||
|
bool mPixelShaderExists;
|
||
|
bool mProgramExists;
|
||
|
GLuint mVertexShader;
|
||
|
GLuint mPixelShader;
|
||
|
GLuint mProgram;
|
||
|
|
||
|
GLuint mMVPBlockIndex;
|
||
|
GLuint mVertexBlockIndex;
|
||
|
GLuint mPixelBlockIndex;
|
||
|
GLuint mLightBlockIndex;
|
||
|
|
||
|
static CShader* spCurrentShader;
|
||
|
|
||
|
public:
|
||
|
CShader();
|
||
|
CShader(const char* kpVertexSource, const char* kpPixelSource);
|
||
|
~CShader();
|
||
|
bool CompileVertexSource(const char* kpSource);
|
||
|
bool CompilePixelSource(const char* kpSource);
|
||
|
bool LinkShaders();
|
||
|
bool IsValidProgram();
|
||
|
GLuint GetProgramID();
|
||
|
GLuint GetUniformLocation(const char* Uniform);
|
||
|
GLuint GetUniformBlockIndex(const char* UniformBlock);
|
||
|
void SetCurrent();
|
||
|
|
||
|
// Static
|
||
|
static CShader* FromResourceFile(std::string ShaderName);
|
||
|
static CShader* CurrentShader();
|
||
|
static void KillCachedShader();
|
||
|
|
||
|
private:
|
||
|
void DumpShaderSource(GLuint Shader, std::string Out);
|
||
|
};
|
||
|
|
||
|
#endif // CSHADER_H
|