+ added glclasses for texture, fbo & rbo
This commit is contained in:
parent
0b71aad1f7
commit
415465df71
2 changed files with 203 additions and 106 deletions
|
@ -13,10 +13,8 @@ namespace endofthejedi {
|
|||
void VAO::bind() { glBindVertexArray(m_name); }
|
||||
void VAO::unbind() { glBindVertexArray(0); }
|
||||
|
||||
void VAO::fill(GLuint index, GLint size, GLenum type,
|
||||
GLboolean normalized, GLsizei stride,
|
||||
const GLvoid *pointer)
|
||||
{
|
||||
void VAO::fill(GLuint index, GLint size, GLenum type, GLboolean normalized,
|
||||
GLsizei stride, const GLvoid *pointer) {
|
||||
glEnableVertexAttribArray(index);
|
||||
glVertexAttribPointer(index, size, type, normalized, stride, pointer);
|
||||
}
|
||||
|
@ -65,8 +63,7 @@ namespace endofthejedi {
|
|||
return result != GL_FALSE;
|
||||
}
|
||||
|
||||
void Shader::bind()
|
||||
{
|
||||
void Shader::bind() {
|
||||
if (m_program == 0) {
|
||||
std::cerr << "error: invalid to bind invalid program (0)! "
|
||||
"use unbind() if that was your purpose!" << std::endl;
|
||||
|
@ -84,7 +81,8 @@ namespace endofthejedi {
|
|||
|
||||
void Shader::load(const std::string &data, GLenum shadertype) {
|
||||
if (m_program == 0) {
|
||||
std::cout<<"[shader] error: shader program is invalid (0)!" << std::endl;
|
||||
std::cout << "[shader] error: shader program is invalid (0)!"
|
||||
<< std::endl;
|
||||
exit(-1);
|
||||
return;
|
||||
}
|
||||
|
@ -108,7 +106,8 @@ namespace endofthejedi {
|
|||
std::ifstream fileStream(path, std::ios::in);
|
||||
|
||||
if (!fileStream.is_open()) {
|
||||
std::cerr << "Could not read file " << path << ". File does not exist." << std::endl;
|
||||
std::cerr << "Could not read file " << path << ". File does not exist."
|
||||
<< std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -125,17 +124,64 @@ namespace endofthejedi {
|
|||
GLuint Shader::location(const std::string &name) {
|
||||
return glGetUniformLocation(m_program, name.c_str());
|
||||
}
|
||||
|
||||
Texture::Texture() { glGenTextures(1, &m_name); }
|
||||
|
||||
Texture::~Texture() { glDeleteTextures(1, &m_name); }
|
||||
|
||||
void Texture::bind() { glBindTexture(GL_TEXTURE_2D, m_name); }
|
||||
|
||||
void Texture::unbind() { glBindTexture(GL_TEXTURE_2D, 0); }
|
||||
|
||||
void Texture::fill(GLenum target, GLint level, GLint internalFormat,
|
||||
GLsizei width, GLsizei height, GLint border, GLenum format,
|
||||
GLenum type, const GLvoid *data) {
|
||||
bind();
|
||||
glTexImage2D(target, level, internalFormat, width, height, border, format,
|
||||
type, data);
|
||||
}
|
||||
GLuint Texture::getName() { return m_name; }
|
||||
|
||||
Framebuffer::Framebuffer() { glGenFramebuffers(1, &m_name); }
|
||||
|
||||
Framebuffer::~Framebuffer() { glDeleteFramebuffers(1, &m_name); }
|
||||
|
||||
void Framebuffer::bind() { glBindFramebuffer(GL_FRAMEBUFFER, m_name); }
|
||||
|
||||
void Framebuffer::unbind() { glBindFramebuffer(GL_FRAMEBUFFER, 0); }
|
||||
|
||||
void Framebuffer::attachRenderbuffer(GLenum attachment, GLuint rbo) {
|
||||
bind();
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, attachment, GL_RENDERBUFFER, rbo);
|
||||
}
|
||||
|
||||
void printGlError(GLenum err)
|
||||
{
|
||||
void Framebuffer::attachTexture(GLenum attachment, GLuint tex) {
|
||||
bind();
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, attachment, GL_TEXTURE_2D, tex, 0);
|
||||
}
|
||||
|
||||
Renderbuffer::Renderbuffer() { glGenRenderbuffers(1, &m_name); }
|
||||
|
||||
Renderbuffer::~Renderbuffer() { glDeleteRenderbuffers(1, &m_name); }
|
||||
|
||||
void Renderbuffer::bind() { glBindRenderbuffer(GL_RENDERBUFFER, m_name); }
|
||||
|
||||
void Renderbuffer::unbind() { glBindRenderbuffer(GL_RENDERBUFFER, 0); }
|
||||
|
||||
void Renderbuffer::create(GLenum internalformat, GLsizei width,
|
||||
GLsizei height) {
|
||||
bind();
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, internalformat, width, height);
|
||||
}
|
||||
}
|
||||
|
||||
void printGlError(GLenum err) {
|
||||
if (err != GL_NO_ERROR) {
|
||||
std::cout << "opengl error is: " << stringFromGlError(err) << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
void discardLastGlError(bool print)
|
||||
{
|
||||
void discardLastGlError(bool print) {
|
||||
GLenum err = glGetError();
|
||||
if (print) {
|
||||
printGlError(err);
|
||||
|
@ -143,8 +189,7 @@ void discardLastGlError(bool print)
|
|||
}
|
||||
|
||||
// return false if there's an error
|
||||
bool checkAndPrintGlError()
|
||||
{
|
||||
bool checkAndPrintGlError() {
|
||||
GLenum err = glGetError();
|
||||
|
||||
printGlError(err);
|
||||
|
@ -152,15 +197,25 @@ bool checkAndPrintGlError()
|
|||
return true;
|
||||
}
|
||||
|
||||
const char *stringFromGlError(GLenum err)
|
||||
{
|
||||
const char *stringFromGlError(GLenum err) {
|
||||
switch (err) {
|
||||
case GL_INVALID_ENUM: return "GL_INVALID_ENUM"; break;
|
||||
case GL_INVALID_VALUE: return "GL_INVALID_VALUE"; break;
|
||||
case GL_INVALID_OPERATION: return "GL_INVALID_OPERATION"; break;
|
||||
case GL_OUT_OF_MEMORY: return "GL_OUT_OF_MEMORY"; break;
|
||||
case GL_INVALID_FRAMEBUFFER_OPERATION: return "GL_INVALID_FRAMEBUFFER_OPERATION"; break;
|
||||
default: return "<unknown>"; break;
|
||||
case GL_INVALID_ENUM:
|
||||
return "GL_INVALID_ENUM";
|
||||
break;
|
||||
case GL_INVALID_VALUE:
|
||||
return "GL_INVALID_VALUE";
|
||||
break;
|
||||
case GL_INVALID_OPERATION:
|
||||
return "GL_INVALID_OPERATION";
|
||||
break;
|
||||
case GL_OUT_OF_MEMORY:
|
||||
return "GL_OUT_OF_MEMORY";
|
||||
break;
|
||||
case GL_INVALID_FRAMEBUFFER_OPERATION:
|
||||
return "GL_INVALID_FRAMEBUFFER_OPERATION";
|
||||
break;
|
||||
default:
|
||||
return "<unknown>";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -61,6 +61,49 @@ class Shader {
|
|||
GLuint location(const std::string &name);
|
||||
GLuint program();
|
||||
};
|
||||
|
||||
class Texture {
|
||||
private:
|
||||
GLuint m_name;
|
||||
|
||||
protected:
|
||||
public:
|
||||
Texture();
|
||||
~Texture();
|
||||
void bind();
|
||||
void unbind();
|
||||
void fill(GLenum target, GLint level, GLint internalFormat, GLsizei width,
|
||||
GLsizei height, GLint border, GLenum format, GLenum type,
|
||||
const GLvoid *data);
|
||||
GLuint getName();
|
||||
};
|
||||
|
||||
class Framebuffer {
|
||||
private:
|
||||
GLuint m_name;
|
||||
|
||||
protected:
|
||||
public:
|
||||
Framebuffer();
|
||||
~Framebuffer();
|
||||
void bind();
|
||||
void unbind();
|
||||
void attachRenderbuffer(GLenum attachment, GLuint rbo);
|
||||
void attachTexture(GLenum attachment, GLuint tex);
|
||||
};
|
||||
|
||||
class Renderbuffer {
|
||||
private:
|
||||
GLuint m_name;
|
||||
|
||||
protected:
|
||||
public:
|
||||
Renderbuffer();
|
||||
~Renderbuffer();
|
||||
void bind();
|
||||
void unbind();
|
||||
void create(GLenum internalformat, GLsizei width, GLsizei height);
|
||||
};
|
||||
}
|
||||
|
||||
#define TBufferObject_(pre, post) \
|
||||
|
@ -102,4 +145,3 @@ bool checkAndPrintGlError();
|
|||
void printGlError(GLenum err);
|
||||
|
||||
const char *stringFromGlError(GLenum err);
|
||||
|
||||
|
|
Loading…
Reference in a new issue