diff options
author | Ben Murdoch <benm@google.com> | 2011-05-16 16:25:10 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-05-23 18:54:14 +0100 |
commit | ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb (patch) | |
tree | db769fadd053248f85db67434a5b275224defef7 /Source/ThirdParty/ANGLE/src/libGLESv2/Framebuffer.cpp | |
parent | 52e2557aeb8477967e97fd24f20f8f407a10fa15 (diff) | |
download | external_webkit-ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb.zip external_webkit-ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb.tar.gz external_webkit-ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddb.tar.bz2 |
Merge WebKit at r76408: Initial merge by git.
Change-Id: I5b91decbd693ccbf5c1b8354b37cd68cc9a1ea53
Diffstat (limited to 'Source/ThirdParty/ANGLE/src/libGLESv2/Framebuffer.cpp')
-rw-r--r-- | Source/ThirdParty/ANGLE/src/libGLESv2/Framebuffer.cpp | 54 |
1 files changed, 35 insertions, 19 deletions
diff --git a/Source/ThirdParty/ANGLE/src/libGLESv2/Framebuffer.cpp b/Source/ThirdParty/ANGLE/src/libGLESv2/Framebuffer.cpp index 5c4bc99..5fe01e0 100644 --- a/Source/ThirdParty/ANGLE/src/libGLESv2/Framebuffer.cpp +++ b/Source/ThirdParty/ANGLE/src/libGLESv2/Framebuffer.cpp @@ -305,13 +305,32 @@ GLenum Framebuffer::completeness() return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT; } - if (IsTextureTarget(mColorbufferType)) + if (mColorbufferType == GL_RENDERBUFFER) + { + if (!gl::IsColorRenderable(colorbuffer->getFormat())) + { + return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT; + } + } + else if (IsTextureTarget(mColorbufferType)) { if (IsCompressed(colorbuffer->getFormat())) { return GL_FRAMEBUFFER_UNSUPPORTED; } + + if (colorbuffer->isFloatingPoint() && (!getContext()->supportsFloatRenderableTextures() || + !getContext()->supportsHalfFloatRenderableTextures())) + { + return GL_FRAMEBUFFER_UNSUPPORTED; + } + + if (colorbuffer->getFormat() == GL_LUMINANCE || colorbuffer->getFormat() == GL_LUMINANCE_ALPHA) + { + return GL_FRAMEBUFFER_UNSUPPORTED; + } } + else UNREACHABLE(); width = colorbuffer->getWidth(); height = colorbuffer->getHeight(); @@ -327,6 +346,11 @@ GLenum Framebuffer::completeness() if (mDepthbufferType != GL_NONE) { + if (mDepthbufferType != GL_RENDERBUFFER) + { + return GL_FRAMEBUFFER_UNSUPPORTED; // Requires GL_OES_depth_texture + } + depthbuffer = getDepthbuffer(); if (!depthbuffer) @@ -357,18 +381,15 @@ GLenum Framebuffer::completeness() { return GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE; } - - if (IsTextureTarget(mDepthbufferType)) - { - if (IsCompressed(depthbuffer->getFormat())) - { - return GL_FRAMEBUFFER_UNSUPPORTED; - } - } } if (mStencilbufferType != GL_NONE) { + if (mStencilbufferType != GL_RENDERBUFFER) + { + return GL_FRAMEBUFFER_UNSUPPORTED; + } + stencilbuffer = getStencilbuffer(); if (!stencilbuffer) @@ -399,14 +420,6 @@ GLenum Framebuffer::completeness() { return GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE; } - - if (IsTextureTarget(mStencilbufferType)) - { - if (IsCompressed(stencilbuffer->getFormat())) - { - return GL_FRAMEBUFFER_UNSUPPORTED; - } - } } if (mDepthbufferType == GL_RENDERBUFFER && mStencilbufferType == GL_RENDERBUFFER) @@ -425,8 +438,8 @@ GLenum Framebuffer::completeness() DefaultFramebuffer::DefaultFramebuffer(Colorbuffer *color, DepthStencilbuffer *depthStencil) { mColorbufferType = GL_RENDERBUFFER; - mDepthbufferType = GL_RENDERBUFFER; - mStencilbufferType = GL_RENDERBUFFER; + mDepthbufferType = (depthStencil->getDepthSize() != 0) ? GL_RENDERBUFFER : GL_NONE; + mStencilbufferType = (depthStencil->getStencilSize() != 0) ? GL_RENDERBUFFER : GL_NONE; mColorbufferPointer.set(new Renderbuffer(0, color)); @@ -449,6 +462,9 @@ int Framebuffer::getSamples() GLenum DefaultFramebuffer::completeness() { + // The default framebuffer should always be complete + ASSERT(Framebuffer::completeness() == GL_FRAMEBUFFER_COMPLETE); + return GL_FRAMEBUFFER_COMPLETE; } |