Merge pull request #1156 from AbigailBuccaneer/redundant-shadowmap-renderbuffer

Don't create a color renderbuffer for shadow map
1008-fix
tomangelo 2018-07-23 12:14:45 +02:00 committed by GitHub
commit 5041aa377d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 13 deletions

View File

@ -41,10 +41,15 @@ struct FramebufferParams
int depth = 16; int depth = 16;
//! Requested number of samples for multisampling //! Requested number of samples for multisampling
int samples = 1; int samples = 1;
//! true requests color texture
bool colorTexture = false; enum class AttachmentType
//! true requests depth texture {
bool depthTexture = false; Texture,
Renderbuffer,
None,
};
AttachmentType colorAttachment = AttachmentType::Renderbuffer;
AttachmentType depthAttachment = AttachmentType::Renderbuffer;
//! Loads default values //! Loads default values
void LoadDefault() void LoadDefault()

View File

@ -3786,7 +3786,8 @@ void CEngine::RenderShadowMap()
FramebufferParams params; FramebufferParams params;
params.width = params.height = width; params.width = params.height = width;
params.depth = depth = 32; params.depth = depth = 32;
params.depthTexture = true; params.colorAttachment = FramebufferParams::AttachmentType::None;
params.depthAttachment = FramebufferParams::AttachmentType::Texture;
CFramebuffer *framebuffer = m_device->CreateFramebuffer("shadow", params); CFramebuffer *framebuffer = m_device->CreateFramebuffer("shadow", params);
if (framebuffer == nullptr) if (framebuffer == nullptr)

View File

@ -55,7 +55,7 @@ bool CGLFramebuffer::Create()
glBindFramebuffer(GL_FRAMEBUFFER, m_fbo); glBindFramebuffer(GL_FRAMEBUFFER, m_fbo);
// create color texture // create color texture
if (m_params.colorTexture) if (m_params.colorAttachment == FramebufferParams::AttachmentType::Texture)
{ {
GLint previous; GLint previous;
glGetIntegerv(GL_TEXTURE_BINDING_2D, &previous); glGetIntegerv(GL_TEXTURE_BINDING_2D, &previous);
@ -76,7 +76,7 @@ bool CGLFramebuffer::Create()
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colorTexture, 0); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colorTexture, 0);
} }
// create color renderbuffer // create color renderbuffer
else else if (m_params.colorAttachment == FramebufferParams::AttachmentType::Renderbuffer)
{ {
glGenRenderbuffers(1, &m_colorRenderbuffer); glGenRenderbuffers(1, &m_colorRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_colorRenderbuffer); glBindRenderbuffer(GL_RENDERBUFFER, m_colorRenderbuffer);
@ -92,6 +92,10 @@ bool CGLFramebuffer::Create()
glFramebufferRenderbuffer(GL_FRAMEBUFFER, glFramebufferRenderbuffer(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_colorRenderbuffer); GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_colorRenderbuffer);
} }
else
{
glDrawBuffer(GL_NONE);
}
GLuint depthFormat = 0; GLuint depthFormat = 0;
@ -104,7 +108,7 @@ bool CGLFramebuffer::Create()
} }
// create depth texture // create depth texture
if (m_params.depthTexture) if (m_params.depthAttachment == FramebufferParams::AttachmentType::Texture)
{ {
GLint previous; GLint previous;
glGetIntegerv(GL_TEXTURE_BINDING_2D, &previous); glGetIntegerv(GL_TEXTURE_BINDING_2D, &previous);
@ -132,7 +136,7 @@ bool CGLFramebuffer::Create()
GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_depthTexture, 0); GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_depthTexture, 0);
} }
// create depth renderbuffer // create depth renderbuffer
else else if (m_params.depthAttachment == FramebufferParams::AttachmentType::Renderbuffer)
{ {
glGenRenderbuffers(1, &m_depthRenderbuffer); glGenRenderbuffers(1, &m_depthRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_depthRenderbuffer); glBindRenderbuffer(GL_RENDERBUFFER, m_depthRenderbuffer);
@ -323,7 +327,7 @@ bool CGLFramebufferEXT::Create()
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fbo); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fbo);
// create color texture // create color texture
if (m_params.colorTexture) if (m_params.colorAttachment == FramebufferParams::AttachmentType::Texture)
{ {
GLint previous; GLint previous;
glGetIntegerv(GL_TEXTURE_BINDING_2D, &previous); glGetIntegerv(GL_TEXTURE_BINDING_2D, &previous);
@ -346,7 +350,7 @@ bool CGLFramebufferEXT::Create()
GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_colorTexture, 0); GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_colorTexture, 0);
} }
// create color renderbuffer // create color renderbuffer
else else if (m_params.colorAttachment == FramebufferParams::AttachmentType::Renderbuffer)
{ {
glGenRenderbuffersEXT(1, &m_colorRenderbuffer); glGenRenderbuffersEXT(1, &m_colorRenderbuffer);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_colorRenderbuffer); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_colorRenderbuffer);
@ -363,6 +367,10 @@ bool CGLFramebufferEXT::Create()
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, m_colorRenderbuffer); GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, m_colorRenderbuffer);
} }
else
{
glDrawBuffer(GL_NONE);
}
GLuint depthFormat = 0; GLuint depthFormat = 0;
@ -375,7 +383,7 @@ bool CGLFramebufferEXT::Create()
} }
// create depth texture // create depth texture
if (m_params.depthTexture) if (m_params.depthAttachment == FramebufferParams::AttachmentType::Texture)
{ {
GLint previous; GLint previous;
glGetIntegerv(GL_TEXTURE_BINDING_2D, &previous); glGetIntegerv(GL_TEXTURE_BINDING_2D, &previous);
@ -403,7 +411,7 @@ bool CGLFramebufferEXT::Create()
GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, m_depthTexture, 0); GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, m_depthTexture, 0);
} }
// create depth renderbuffer // create depth renderbuffer
else else if (m_params.depthAttachment == FramebufferParams::AttachmentType::Renderbuffer)
{ {
glGenRenderbuffersEXT(1, &m_depthRenderbuffer); glGenRenderbuffersEXT(1, &m_depthRenderbuffer);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_depthRenderbuffer); glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_depthRenderbuffer);