FBO setup:
void fbuffer::create(bool mrt, bool hdr, bool depth, bool multisample, int samples, bool noColour)
{
if(hdr)
{
colorFormat = GL_HALF_FLOAT_ARB;
format = GL_RGBA16F_ARB;
}
else
{
colorFormat = GL_UNSIGNED_BYTE;
}
glGenFramebuffersEXT(1, &fbo);
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, fbo);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, format, screenw, screenh, 0, GL_RGBA, colorFormat, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glGenRenderbuffersEXT(1, &rboColour);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rboColour);
if(GLEW_EXT_framebuffer_multisample && multisample)
{
glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, format, screenw, screenh);
}
else
{
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, format, screenw, screenh);
}
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, rboColour);
glFramebufferTexture2DEXT(GL_DRAW_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texture, 0);
if(mrt)
{
glGenTextures(1, &texture2);
glBindTexture(GL_TEXTURE_2D, texture2);
glTexImage2D(GL_TEXTURE_2D, 0, format, screenw, screenh, 0, GL_RGBA, colorFormat, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glGenRenderbuffersEXT(1, &rboColour2);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rboColour2);
if(GLEW_EXT_framebuffer_multisample && multisample)
{
glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, format, screenw, screenh);
}
else
{
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, format, screenw, screenh);
}
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_RENDERBUFFER_EXT, rboColour2);
glFramebufferTexture2DEXT(GL_DRAW_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, texture2, 0);
}
if(depth)
{
glGenTextures(1, &depthtex);
glBindTexture(GL_TEXTURE_2D, depthtex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, screenw, screenh, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glGenRenderbuffersEXT(1, &rboDepth);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rboDepth);
if(GLEW_EXT_framebuffer_multisample && multisample)
{
glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, samples, GL_DEPTH_COMPONENT, screenw, screenh);
}
else
{
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, screenw, screenh);
}
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, rboDepth);
glFramebufferTexture2DEXT(GL_DRAW_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, depthtex, 0);
}
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glBindTexture(GL_TEXTURE_2D, 0);
}
void fbuffer::bind()
{
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
}
creating the objects:
msbuffer.format = screen->format->BytesPerPixel; msbuffer.screenw = screen->w; msbuffer.screenh = screen->h; msbuffer.create(true, true, true, true, 8, false); fbo1.format = screen->format->BytesPerPixel; fbo1.screenw = screen->w; fbo1.screenh = screen->h; fbo1.create(true, true, true, false, 1, false);
blitting the buffers:
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, msbuffer.fbo); glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, fbo1.fbo); glBlitFramebufferEXT(0, 0, screen->w, screen->h, 0, 0, screen->w, screen->h, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, GL_NEAREST); fbo1.bind();
Anyone know what I'm doing wrong?






