| Index: third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp
|
| diff --git a/third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp b/third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp
|
| index ccd6d8caaf99ad3548c4e5d3c4e10b6760fbda4e..4eeaa89566d14da3876eb791002d6ed9f2555805 100644
|
| --- a/third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp
|
| +++ b/third_party/WebKit/Source/modules/webgl/WebGLFramebuffer.cpp
|
| @@ -46,6 +46,7 @@ private:
|
|
|
| GLsizei width() const override;
|
| GLsizei height() const override;
|
| + GLsizei depth() const override;
|
| GLenum format() const override;
|
| GLenum type() const override;
|
| bool isCubeComplete() const override;
|
| @@ -85,6 +86,11 @@ GLsizei WebGLRenderbufferAttachment::height() const
|
| return m_renderbuffer->height();
|
| }
|
|
|
| +GLsizei WebGLRenderbufferAttachment::depth() const
|
| +{
|
| + return 1;
|
| +}
|
| +
|
| GLenum WebGLRenderbufferAttachment::format() const
|
| {
|
| GLenum format = m_renderbuffer->internalFormat();
|
| @@ -160,6 +166,7 @@ private:
|
|
|
| GLsizei width() const override;
|
| GLsizei height() const override;
|
| + GLsizei depth() const override;
|
| GLenum format() const override;
|
| GLenum type() const override;
|
| bool isCubeComplete() const override;
|
| @@ -205,6 +212,11 @@ GLsizei WebGLTextureAttachment::height() const
|
| return m_texture->getHeight(m_target, m_level);
|
| }
|
|
|
| +GLsizei WebGLTextureAttachment::depth() const
|
| +{
|
| + return m_texture->getDepth(m_target, m_level);
|
| +}
|
| +
|
| GLenum WebGLTextureAttachment::format() const
|
| {
|
| return m_texture->getInternalFormat(m_target, m_level);
|
| @@ -539,7 +551,7 @@ GLenum WebGLFramebuffer::colorBufferFormat() const
|
| GLenum WebGLFramebuffer::checkStatus(const char** reason) const
|
| {
|
| unsigned count = 0;
|
| - GLsizei width = 0, height = 0;
|
| + GLsizei width = 0, height = 0, depth = 0;
|
| WebGLAttachment* depthAttachment = nullptr;
|
| WebGLAttachment* stencilAttachment = nullptr;
|
| WebGLAttachment* depthStencilAttachment = nullptr;
|
| @@ -567,15 +579,18 @@ GLenum WebGLFramebuffer::checkStatus(const char** reason) const
|
| depthStencilAttachment = attachment;
|
| break;
|
| }
|
| - if (!isWebGL2OrHigher) {
|
| - if (!count) {
|
| - width = attachment->width();
|
| - height = attachment->height();
|
| - } else {
|
| - if (width != attachment->width() || height != attachment->height()) {
|
| - *reason = "attachments do not have the same dimensions";
|
| - return GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
|
| - }
|
| + // Note: In GLES 3, images for a framebuffer need not to have the same dimensions to be framebuffer complete.
|
| + // However, in Direct3D 11, on top of which OpenGL ES 3 behavior is emulated in Windows, all render targets
|
| + // must have the same size in all dimensions. In order to have consistent WebGL 2 behaviors across platforms,
|
| + // we generate FRAMEBUFFER_INCOMPLETE_DIMENSIONS in this situation.
|
| + if (!count) {
|
| + width = attachment->width();
|
| + height = attachment->height();
|
| + depth = attachment->depth();
|
| + } else {
|
| + if (width != attachment->width() || height != attachment->height() || depth != attachment->depth()) {
|
| + *reason = "attachments do not have the same dimensions";
|
| + return GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS;
|
| }
|
| }
|
| ++count;
|
|
|