From 378c13c869ec6fa9205dec9773ce9a55d2a20fac Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 2 Sep 2012 23:17:01 -0400 Subject: [PATCH] add GLShader class --- src/client/GLShader.cc | 50 ++++++++++++++++++++++++++++++++++++++++++ src/client/GLShader.h | 19 ++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 src/client/GLShader.cc create mode 100644 src/client/GLShader.h diff --git a/src/client/GLShader.cc b/src/client/GLShader.cc new file mode 100644 index 0000000..081f1e4 --- /dev/null +++ b/src/client/GLShader.cc @@ -0,0 +1,50 @@ + +#include "GLShader.h" +#include + +using namespace std; + +GLShader::GLShader() +{ + m_id = 0; +} + +GLShader::~GLShader() +{ + if (m_id > 0) + { + glDeleteShader(m_id); + } +} + +bool GLShader::create(GLenum shaderType, const char *source) +{ + GLint status; + + m_id = glCreateShader(shaderType); + if (m_id > 0) + { + glShaderSource(m_id, 1, &source, NULL); + + glCompileShader(m_id); + + glGetShaderiv(m_id, GL_COMPILE_STATUS, &status); + if (status == GL_TRUE) + { + return true; + } + + GLint log_length; + cerr << "Error compiling shader" << endl; + glGetShaderiv(m_id, GL_INFO_LOG_LENGTH, &log_length); + if (log_length > 0) + { + char * log = new char[log_length]; + glGetShaderInfoLog(m_id, log_length, &log_length, log); + cerr << "Shader Log:" << endl << log << endl; + delete[] log; + } + glDeleteShader(m_id); + } + return false; +} diff --git a/src/client/GLShader.h b/src/client/GLShader.h new file mode 100644 index 0000000..fc20fbc --- /dev/null +++ b/src/client/GLShader.h @@ -0,0 +1,19 @@ + +#ifndef GLSHADER_H +#define GLSHADER_H + +#include + +class GLShader +{ + public: + GLShader(); + ~GLShader(); + bool create(GLenum shaderType, const char *source); + GLuint get_id() { return m_id; } + bool valid() { return m_id > 0; } + protected: + GLuint m_id; +}; + +#endif