I have some code to generate a framebuffer and bind it. It doesn’t and I get the error code 1280. Line of code that gives the error:
GLCall(glBindFramebuffer(GL_FRAMEBUFFER, fbo));
My code:
#include "OpenGLFBO.h"
void OpenGL_FBO::CreateFBO(bool drawDefault)
{
//LOG(OpenGL_FBO::height);
//LOG(OpenGL_FBO::width);
glGenFramebuffers(1, &fbo_id);
glBindFramebuffer(GL_FRAMEBUFFER, fbo_id);
glEnable(GL_TEXTURE_2D);
glEnable(GL_SCISSOR_TEST);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, OpenGL_FBO::texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, OpenGL_FBO::width, OpenGL_FBO::height, 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
ASSERT("Error");
//GLenum DrawBuffers[1] = { GL_COLOR_ATTACHMENT0 };
//glDrawBuffers(1, DrawBuffers);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
if (drawDefault) {
glBindFramebuffer(GL_FRAMEBUFFER, OpenGL_FBO::fbo_id);
GLuint VAO;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
float vertices[] = {
0.0f, -2.0f,
2.0f, -2.0f,
1.0f, 0.0f
};
GLuint VBO;
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_DYNAMIC_DRAW);
glActiveTexture(GL_TEXTURE0);
glViewport(0, 0, OpenGL_FBO::width, OpenGL_FBO::height);
glScissor(0, 0, OpenGL_FBO::width, OpenGL_FBO::height);
glClearColor(1.0f, 0.1f, 0.1f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
//glBindBuffer(GL_ARRAY_BUFFER, 0);
//glBindFramebuffer(GL_FRAMEBUFFER, 0);
//glBindTexture(GL_TEXTURE_2D, OpenGL_FBO::texture);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
/*glBegin(GL_TRIANGLES);
glVertex2f(0.0f, -2.0f);
glVertex2f(2.0f, -2.0f);
glVertex2f(1.0f, 0.0f);
glEnd();*/
glBindFramebuffer(GL_FRAMEBUFFER, 0);
//glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}
//glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
glDisable(GL_SCISSOR_TEST);
}
void OpenGL_FBO::Bind()
{
GLCall(glBindFramebuffer(GL_FRAMEBUFFER, fbo_id));
}
void OpenGL_FBO::Unbind()
{
GLCall(glBindFramebuffer(GL_FRAMEBUFFER, 0));
}
OpenGL_FBO::~OpenGL_FBO() {
GLCall(glDeleteFramebuffers(1, &fbo_id));
}
the fbo is in a header file.
I also run the create function first, then the bind.
Edit:
I have fixed my code! Very sorry!