the result wanted is a RTT multisampled and have the window frame buffer with the same result.
void PBuffer::Set()
{
if (m_FrameBufferId == 0)
{
glGenFramebuffersEXT(1, &m_FrameBufferId);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_FrameBufferId);
/// Color texture.
AX6_RENDERER()->GenerateTexture(m_ColorTexture);
glGenerateMipmapEXT(m_ColorTexture->GetDimension());
AX6_RENDERER()->DisableTexture(m_ColorTexture);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, m_ColorTexture->GetDimension(), m_ColorTexture->GetId(), 0);
AX6_OPENGL_CHECK_FRAME_BUFFER_STATUS();
/// Depth texture.
AX6_RENDERER()->GenerateTexture(m_DepthTexture);
glGenerateMipmapEXT(m_DepthTexture->GetDimension());
AX6_RENDERER()->DisableTexture(m_DepthTexture);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, m_DepthTexture->GetDimension(), m_DepthTexture->GetId(), 0);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, m_DepthTexture->GetDimension(), m_DepthTexture->GetId(), 0);
AX6_OPENGL_CHECK_FRAME_BUFFER_STATUS();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
if (b_MultiSampled)
{
if (m_MultiSamples > AX6_RENDERER()->GetMaxMultiSamples())
m_MultiSamples = AX6_RENDERER()->GetMaxMultiSamples();
/// Color buffer.
glGenRenderbuffersEXT(1, &m_ColorBufferId);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_ColorBufferId);
glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, m_MultiSamples, GL_RGBA, m_Width, m_Height);
AX6_OPENGL_CHECK_FRAME_BUFFER_STATUS();
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
/// Depth buffer.
glGenRenderbuffersEXT(1, &m_DepthBufferId);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_DepthBufferId);
glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, m_MultiSamples, GL_DEPTH_COMPONENT24, m_Width, m_Height);
AX6_OPENGL_CHECK_FRAME_BUFFER_STATUS();
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
/// Attach buffers.
glGenFramebuffersEXT(1, &m_MultiBufferId);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_MultiBufferId);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_DepthBufferId);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, m_ColorBufferId);
AX6_OPENGL_CHECK_FRAME_BUFFER_STATUS();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
}
}
else
{
if (b_MultiSampled)
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, m_MultiBufferId);
else
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, m_FrameBufferId);
}
}
void PBuffer::Unset()
{
if (b_MultiSampled)
{
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, m_MultiBufferId);
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, m_FrameBufferId);
glBlitFramebufferEXT(0, 0, m_Width, m_Height, 0, 0, m_Width, m_Height, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, GL_NEAREST);
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, m_FrameBufferId);
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0);
glBlitFramebufferEXT(0, 0, m_Width, m_Height, 0, 0, m_Width, m_Height, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, GL_NEAREST);
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0);
}
else
{
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, m_FrameBufferId);
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0);
glBlitFramebufferEXT(0, 0, m_Width, m_Height, 0, 0, m_Width, m_Height, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, GL_NEAREST);
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0);
}
}
I think I got it pretty much nailed down… thx to you!