From 4ed724472b3e973332571c2373ce99c0a979f1fe Mon Sep 17 00:00:00 2001 From: David Steele Date: Thu, 10 Jun 2021 18:18:22 +0100 Subject: [PATCH] Changed when depth/stencil renderbuffers are created The framebuffer code incorrectly created renderbuffers when textures were being attached. Instead, these are now created when textures are not attached, but depth/stencil attachments are required. Change-Id: Ia417796e2f294ca3f6de174cb7318e4481ff92f5 Signed-off-by: David Steele --- .../graphics/gles-impl/gles-graphics-framebuffer.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/dali/internal/graphics/gles-impl/gles-graphics-framebuffer.cpp b/dali/internal/graphics/gles-impl/gles-graphics-framebuffer.cpp index d909146..2a190b5 100644 --- a/dali/internal/graphics/gles-impl/gles-graphics-framebuffer.cpp +++ b/dali/internal/graphics/gles-impl/gles-graphics-framebuffer.cpp @@ -115,12 +115,14 @@ bool Framebuffer::InitializeResource() auto depthTexture = static_cast(mCreateInfo.depthStencilAttachment.depthTexture); auto attachmentId = DEPTH_STENCIL_ATTACHMENT_TYPE(depthTexture->GetCreateInfo().format).attachment; + AttachTexture(depthTexture, attachmentId, 0, mCreateInfo.depthStencilAttachment.depthLevel); + } + else if(mCreateInfo.depthStencilAttachment.depthUsage == Graphics::DepthStencilAttachment::Usage::WRITE) + { gl->GenRenderbuffers(1, &mDepthBufferId); gl->BindRenderbuffer(GL_RENDERBUFFER, mDepthBufferId); gl->RenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, mCreateInfo.size.width, mCreateInfo.size.height); - gl->FramebufferRenderbuffer(GL_FRAMEBUFFER, attachmentId, GL_RENDERBUFFER, mDepthBufferId); - - AttachTexture(depthTexture, attachmentId, 0, mCreateInfo.depthStencilAttachment.depthLevel); + gl->FramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, mDepthBufferId); } if(mCreateInfo.depthStencilAttachment.stencilTexture) @@ -128,13 +130,14 @@ bool Framebuffer::InitializeResource() auto stencilTexture = static_cast(mCreateInfo.depthStencilAttachment.stencilTexture); auto attachmentId = DEPTH_STENCIL_ATTACHMENT_TYPE(stencilTexture->GetCreateInfo().format).attachment; - // Create a stencil render target. + AttachTexture(stencilTexture, attachmentId, 0, mCreateInfo.depthStencilAttachment.stencilLevel); + } + else if(mCreateInfo.depthStencilAttachment.stencilUsage == Graphics::DepthStencilAttachment::Usage::WRITE) + { gl->GenRenderbuffers(1, &mStencilBufferId); gl->BindRenderbuffer(GL_RENDERBUFFER, mStencilBufferId); gl->RenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, mCreateInfo.size.width, mCreateInfo.size.height); - gl->FramebufferRenderbuffer(GL_FRAMEBUFFER, attachmentId, GL_RENDERBUFFER, mStencilBufferId); - - AttachTexture(stencilTexture, attachmentId, 0, mCreateInfo.depthStencilAttachment.stencilLevel); + gl->FramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, mStencilBufferId); } context->BindFrameBuffer(GL_FRAMEBUFFER, 0); -- 2.7.4