Hello,
I have the following code which works well for creating multi-sampled framebuffers for anti-aliasing.
It works great for OpenGL 3+
What can I change to get a multi-sampled framebuffer object for OpenGL 2.1?
Specifically I know I need to use extensions but I couldn’t find what extensions I need to use for “glTexImage2DMultisample” as an example that would work on most systems that use OpenGL 2.1.
Thank you for your time.
glGetIntegerv(GL_MAX_SAMPLES, &NumOfSamples);
glGenTextures(1, &g_MultiSampleTexture_ID);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, g_MultiSampleTexture_ID);
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, NumOfSamples, GL_RGBA, l_TextureSize.w, l_TextureSize.h, false);
glGenFramebuffers(1, &g_MultiSampleFrameBufferObject_ID);
glBindFramebuffer(GL_FRAMEBUFFER, g_MultiSampleFrameBufferObject_ID);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_MULTISAMPLE, g_MultiSampleTexture_ID, 0);
glGenRenderbuffers(1, &g_MultiSampleColorRenderBufferObject_ID);
glBindRenderbuffer(GL_RENDERBUFFER, g_MultiSampleColorRenderBufferObject_ID);
glRenderbufferStorageMultisample(GL_RENDERBUFFER, NumOfSamples, GL_RGBA, l_TextureSize.w, l_TextureSize.h);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, g_MultiSampleColorRenderBufferObject_ID);
glGenRenderbuffers(1, &g_MultiSampleDepthBufferObject_ID);
glBindRenderbuffer(GL_RENDERBUFFER, g_MultiSampleDepthBufferObject_ID);
glRenderbufferStorageMultisample(GL_RENDERBUFFER, NumOfSamples, GL_DEPTH24_STENCIL8, l_TextureSize.w, l_TextureSize.h);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, g_MultiSampleDepthBufferObject_ID);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, g_MultiSampleDepthBufferObject_ID);
g_DrawBufferStatusCheck_ENUM = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER);
if (g_DrawBufferStatusCheck_ENUM != GL_FRAMEBUFFER_COMPLETE) {
switch (g_DrawBufferStatusCheck_ENUM)
{
case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
break;
case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
break;
case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
break;
case GL_FRAMEBUFFER_UNSUPPORTED:
break;
default:
break;
}
glBindRenderbuffer(GL_RENDERBUFFER, NULL);
glBindTexture(GL_TEXTURE_2D, NULL);
glBindFramebuffer(GL_FRAMEBUFFER, NULL);
return false;
}