I still have little problem
I have this code here to initialize a buffer
CBuffer::CBuffer(int Width, int Height, int type)
{
// Create the frame buffer
glGenFramebuffersEXT(1, &this->bufferID);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, this->bufferID);
if(type & BUFFER_DEPTH)
{
glGenTextures(1, &this->depth);
glBindTexture(GL_TEXTURE_2D, this->depth);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0,GL_ALPHA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,GL_TEXTURE_2D, color, 0);
GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
}
if(type & BUFFER_COLOR)
{
glGenTextures(1, &this->color);
glBindTexture(GL_TEXTURE_2D, this->color);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0,GL_RGBA, GL_UNSIGNED_BYTE, 0);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_2D, color, 0);
}
if(type & BUFFER_NORMAL)
{
glGenTextures(1, &this->aux0);
glBindTexture(GL_TEXTURE_2D, this->aux0);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0,GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT,GL_TEXTURE_2D, aux0, 0);
GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
}
width =Width;
height=Height;
// check FBO status
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, this->bufferID);
int status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
switch(status)
{
case GL_FRAMEBUFFER_COMPLETE_EXT:
fprintf(GetCurrentEngine()->logFile, "Framebuffer complete.
");
break;
case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
fprintf(GetCurrentEngine()->logFile,"[ERROR] Framebuffer incomplete: Attachment is NOT complete." );
break;
case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
fprintf(GetCurrentEngine()->logFile,"[ERROR] Framebuffer incomplete: No image is attached to FBO." );
break;
case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
fprintf(GetCurrentEngine()->logFile,"[ERROR] Framebuffer incomplete: Attached images have different dimensions.");
break;
case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
fprintf(GetCurrentEngine()->logFile,"[ERROR] Framebuffer incomplete: Color attached images have different internal formats." );
break;
case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
fprintf(GetCurrentEngine()->logFile,"[ERROR] Framebuffer incomplete: Draw buffer.
");
break;
case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
fprintf(GetCurrentEngine()->logFile,"[ERROR] Framebuffer incomplete: Read buffer.
");
break;
case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
fprintf(GetCurrentEngine()->logFile,"[ERROR] Unsupported by FBO implementation.
");
break;
default:
fprintf(GetCurrentEngine()->logFile,"[ERROR] Unknow error.
");
break;
}
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
}
Somehow I get “[ERROR] Framebuffer incomplete: Attachment is NOT complete.” in the log.
I have no ideea why that happens. I preety much followed the tutorials. I don’t even use float textures (those don’t work on some hardware).