Commit 28bedaf8 by Jamie Madill

Fix double delete in Framebuffer.cpp.

Depth-stencil buffers were using the same pointer for both attachments, which was causing a double-delete in the Framebuffer destructor. BUG=angle:686 Change-Id: I8b263e5a084c33b495ce18ef2a2a810918ef6540 Reviewed-on: https://chromium-review.googlesource.com/205639Tested-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent d38f926a
...@@ -160,7 +160,10 @@ void Framebuffer::setDepthStencilBuffer(GLenum type, GLuint depthStencilBuffer, ...@@ -160,7 +160,10 @@ void Framebuffer::setDepthStencilBuffer(GLenum type, GLuint depthStencilBuffer,
if (attachment && attachment->getDepthSize() > 0 && attachment->getStencilSize() > 0) if (attachment && attachment->getDepthSize() > 0 && attachment->getStencilSize() > 0)
{ {
mDepthbuffer = attachment; mDepthbuffer = attachment;
mStencilbuffer = attachment;
// Make a new attachment object to ensure we do not double-delete
// See angle issue 686
mStencilbuffer = createAttachment(type, depthStencilBuffer, level, layer);
} }
} }
...@@ -618,10 +621,12 @@ DefaultFramebuffer::DefaultFramebuffer(rx::Renderer *renderer, Colorbuffer *colo ...@@ -618,10 +621,12 @@ DefaultFramebuffer::DefaultFramebuffer(rx::Renderer *renderer, Colorbuffer *colo
Renderbuffer *colorRenderbuffer = new Renderbuffer(0, colorbuffer); Renderbuffer *colorRenderbuffer = new Renderbuffer(0, colorbuffer);
mColorbuffers[0] = new RenderbufferAttachment(colorRenderbuffer); mColorbuffers[0] = new RenderbufferAttachment(colorRenderbuffer);
Renderbuffer *depthStencilRenderbuffer = new Renderbuffer(0, depthStencil); Renderbuffer *depthStencilBuffer = new Renderbuffer(0, depthStencil);
FramebufferAttachment *depthStencilAttachment = new RenderbufferAttachment(depthStencilRenderbuffer);
mDepthbuffer = (depthStencilRenderbuffer->getDepthSize() != 0 ? depthStencilAttachment : NULL); // Make a new attachment objects to ensure we do not double-delete
mStencilbuffer = (depthStencilRenderbuffer->getStencilSize() != 0 ? depthStencilAttachment : NULL); // See angle issue 686
mDepthbuffer = (depthStencilBuffer->getDepthSize() != 0 ? new RenderbufferAttachment(depthStencilBuffer) : NULL);
mStencilbuffer = (depthStencilBuffer->getStencilSize() != 0 ? new RenderbufferAttachment(depthStencilBuffer) : NULL);
mDrawBufferStates[0] = GL_BACK; mDrawBufferStates[0] = GL_BACK;
mReadBufferState = GL_BACK; mReadBufferState = GL_BACK;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment