[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
zmo at google.com
zmo at google.com
Wed Dec 22 15:29:37 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit e305a676573d5468617115905255b4c7bd7203c8
Author: zmo at google.com <zmo at google.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Thu Nov 4 23:57:44 2010 +0000
2010-11-03 Zhenyao Mo <zmo at google.com>
Reviewed by Kenneth Russell.
renderbufferStorage(DEPTH_STENCIL) shouldn't generate an error
https://bugs.webkit.org/show_bug.cgi?id=48891
* html/canvas/WebGLFramebuffer.cpp:
(WebCore::WebGLFramebuffer::isIncomplete): Considering the case where DEPTH_STENCIL is not supported.
* html/canvas/WebGLRenderbuffer.cpp:
(WebCore::WebGLRenderbuffer::WebGLRenderbuffer): Init added members.
* html/canvas/WebGLRenderbuffer.h: Add members and accessor functions.
(WebCore::WebGLRenderbuffer::setInternalFormat):
(WebCore::WebGLRenderbuffer::setSize):
(WebCore::WebGLRenderbuffer::getWidth):
(WebCore::WebGLRenderbuffer::getHeight):
(WebCore::WebGLRenderbuffer::setIsValid):
(WebCore::WebGLRenderbuffer::isValid):
* html/canvas/WebGLRenderingContext.cpp:
(WebCore::WebGLRenderingContext::initializeNewContext): Check if packed_depth_stencil extension exists.
(WebCore::WebGLRenderingContext::getRenderbufferParameter): Simulate the case for DEPTH_STENCIL where packed_depth_stencil is not supported.
(WebCore::WebGLRenderingContext::renderbufferStorage): Bypass the call if packed_depth_stencil is not supported.
* html/canvas/WebGLRenderingContext.h:
2010-11-03 Zhenyao Mo <zmo at google.com>
Reviewed by Kenneth Russell.
renderbufferStorage(DEPTH_STENCIL) shouldn't generate an error
https://bugs.webkit.org/show_bug.cgi?id=48891
* fast/canvas/webgl/framebuffer-object-attachment-expected.txt:
* fast/canvas/webgl/framebuffer-object-attachment.html: Add the test cases for DEPTH_STENCIL renderbuffer.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71367 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 9e8ef90..ceb581f 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,13 @@
+2010-11-03 Zhenyao Mo <zmo at google.com>
+
+ Reviewed by Kenneth Russell.
+
+ renderbufferStorage(DEPTH_STENCIL) shouldn't generate an error
+ https://bugs.webkit.org/show_bug.cgi?id=48891
+
+ * fast/canvas/webgl/framebuffer-object-attachment-expected.txt:
+ * fast/canvas/webgl/framebuffer-object-attachment.html: Add the test cases for DEPTH_STENCIL renderbuffer.
+
2010-11-04 Brian Weinstein <bweinstein at apple.com>
Rubber-stamped by Jon Honeycutt.
diff --git a/LayoutTests/fast/canvas/webgl/framebuffer-object-attachment-expected.txt b/LayoutTests/fast/canvas/webgl/framebuffer-object-attachment-expected.txt
index 96ffeba..9b1432c 100644
--- a/LayoutTests/fast/canvas/webgl/framebuffer-object-attachment-expected.txt
+++ b/LayoutTests/fast/canvas/webgl/framebuffer-object-attachment-expected.txt
@@ -5,103 +5,118 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
Create renderbuffers
PASS gl = create3DContext() is non-null.
PASS colorBuffer = gl.createRenderbuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
PASS depthBuffer = gl.createRenderbuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
PASS stencilBuffer = gl.createRenderbuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
PASS depthStencilBuffer = gl.createRenderbuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
Attach depth using DEPTH_ATTACHMENT
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
Attach depth using STENCIL_ATTACHMENT
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED
-PASS gl.getError() is gl.INVALID_FRAMEBUFFER_OPERATION
-PASS gl.getError() is gl.INVALID_FRAMEBUFFER_OPERATION
+PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION :
+PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION :
Attach depth using DEPTH_STENCIL_ATTACHMENT
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED
-PASS gl.getError() is gl.INVALID_FRAMEBUFFER_OPERATION
-PASS gl.getError() is gl.INVALID_FRAMEBUFFER_OPERATION
+PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION :
+PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION :
Attach stencil using STENCIL_ATTACHMENT
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
Attach stencil using DEPTH_ATTACHMENT
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED
-PASS gl.getError() is gl.INVALID_FRAMEBUFFER_OPERATION
-PASS gl.getError() is gl.INVALID_FRAMEBUFFER_OPERATION
+PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION :
+PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION :
Attach stencil using DEPTH_STENCIL_ATTACHMENT
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED
-PASS gl.getError() is gl.INVALID_FRAMEBUFFER_OPERATION
-PASS gl.getError() is gl.INVALID_FRAMEBUFFER_OPERATION
+PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION :
+PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION :
Attach depthStencil using DEPTH_STENCIL_ATTACHMENT
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
Attach depthStencil using DEPTH_ATTACHMENT
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED
-PASS gl.getError() is gl.INVALID_FRAMEBUFFER_OPERATION
-PASS gl.getError() is gl.INVALID_FRAMEBUFFER_OPERATION
+PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION :
+PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION :
Attach depthStencil using STENCIL_ATTACHMENT
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED
-PASS gl.getError() is gl.INVALID_FRAMEBUFFER_OPERATION
-PASS gl.getError() is gl.INVALID_FRAMEBUFFER_OPERATION
+PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION :
+PASS getError was expected value: INVALID_FRAMEBUFFER_OPERATION :
Attach depth, then stencil, causing conflict
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
+PASS getError was expected value: NO_ERROR :
PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED
Attach stencil, then depth, causing conflict
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
+PASS getError was expected value: NO_ERROR :
PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED
Attach depth, then depthStencil, causing conflict
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
+PASS getError was expected value: NO_ERROR :
PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED
Attach depthStencil, then depth, causing conflict
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
+PASS getError was expected value: NO_ERROR :
PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED
Attach stencil, then depthStencil, causing conflict
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
+PASS getError was expected value: NO_ERROR :
PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED
Attach depthStencil, then stencil, causing conflict
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
+PASS getError was expected value: NO_ERROR :
PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is gl.FRAMEBUFFER_UNSUPPORTED
Attach color renderbuffer with internalformat == RGBA4
PASS colorBuffer = gl.createRenderbuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
Attach color renderbuffer with internalformat == RGB5_A1
PASS colorBuffer = gl.createRenderbuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
Attach color renderbuffer with internalformat == RGB565
PASS colorBuffer = gl.createRenderbuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
PASS fbo = gl.createFramebuffer() is non-null.
-PASS gl.getError() is gl.NO_ERROR
+PASS getError was expected value: NO_ERROR :
+Create and attach depthStencil renderbuffer
+PASS depthStencilBuffer = gl.createRenderbuffer() is non-null.
+PASS getError was expected value: NO_ERROR :
+PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH) is width
+PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_HEIGHT) is height
+PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_INTERNAL_FORMAT) is gl.DEPTH_STENCIL
+PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_RED_SIZE) is 0
+PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_GREEN_SIZE) is 0
+PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_BLUE_SIZE) is 0
+PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_ALPHA_SIZE) is 0
+PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_DEPTH_SIZE) > 0 is true
+PASS gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_STENCIL_SIZE) > 0 is true
+PASS getError was expected value: NO_ERROR :
+PASS fbo = gl.createFramebuffer() is non-null.
+PASS getError was expected value: NO_ERROR :
PASS successfullyParsed is true
TEST COMPLETE
diff --git a/LayoutTests/fast/canvas/webgl/framebuffer-object-attachment.html b/LayoutTests/fast/canvas/webgl/framebuffer-object-attachment.html
index a7da17e..19e6037 100644
--- a/LayoutTests/fast/canvas/webgl/framebuffer-object-attachment.html
+++ b/LayoutTests/fast/canvas/webgl/framebuffer-object-attachment.html
@@ -25,13 +25,13 @@ function testAttachment(attachment, buffer, isConflicted)
gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorBuffer);
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, buffer);
- shouldBe("gl.getError()", "gl.NO_ERROR");
+ glErrorShouldBe(gl, gl.NO_ERROR);
if (isConflicted) {
shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_UNSUPPORTED");
gl.clear(gl.COLOR_BUFFER_BIT);
- shouldBe("gl.getError()", "gl.INVALID_FRAMEBUFFER_OPERATION");
+ glErrorShouldBe(gl, gl.INVALID_FRAMEBUFFER_OPERATION);
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array(width * height * 4));
- shouldBe("gl.getError()", "gl.INVALID_FRAMEBUFFER_OPERATION");
+ glErrorShouldBe(gl, gl.INVALID_FRAMEBUFFER_OPERATION);
}
}
@@ -41,9 +41,9 @@ function testAttachments(attachment0, buffer0, attachment1, buffer1, isConflicte
gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorBuffer);
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment0, gl.RENDERBUFFER, buffer0);
- shouldBe("gl.getError()", "gl.NO_ERROR");
+ glErrorShouldBe(gl, gl.NO_ERROR);
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment1, gl.RENDERBUFFER, buffer1);
- shouldBe("gl.getError()", "gl.NO_ERROR");
+ glErrorShouldBe(gl, gl.NO_ERROR);
if (isConflicted)
shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_UNSUPPORTED");
}
@@ -53,10 +53,29 @@ function testColorRenderbuffer(internalformat)
shouldBeNonNull("colorBuffer = gl.createRenderbuffer()");
gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer);
gl.renderbufferStorage(gl.RENDERBUFFER, internalformat, width, height);
- shouldBe("gl.getError()", "gl.NO_ERROR");
+ glErrorShouldBe(gl, gl.NO_ERROR);
testAttachment(gl.COLOR_ATTACHMENT0, colorBuffer, false);
}
+function testDepthStencilRenderbuffer()
+{
+ shouldBeNonNull("depthStencilBuffer = gl.createRenderbuffer()");
+ gl.bindRenderbuffer(gl.RENDERBUFFER, depthStencilBuffer);
+ gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height);
+ glErrorShouldBe(gl, gl.NO_ERROR);
+ shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH)", "width");
+ shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_HEIGHT)", "height");
+ shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_INTERNAL_FORMAT)", "gl.DEPTH_STENCIL");
+ shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_RED_SIZE)", "0");
+ shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_GREEN_SIZE)", "0");
+ shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_BLUE_SIZE)", "0");
+ shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_ALPHA_SIZE)", "0");
+ shouldBeTrue("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_DEPTH_SIZE) > 0");
+ shouldBeTrue("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_STENCIL_SIZE) > 0");
+ glErrorShouldBe(gl, gl.NO_ERROR);
+ testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, false);
+}
+
description("Test framebuffer object attachment behaviors");
debug("Create renderbuffers");
@@ -64,19 +83,19 @@ shouldBeNonNull("gl = create3DContext()");
shouldBeNonNull("colorBuffer = gl.createRenderbuffer()");
gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer);
gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, width, height);
-shouldBe("gl.getError()", "gl.NO_ERROR");
+glErrorShouldBe(gl, gl.NO_ERROR);
shouldBeNonNull("depthBuffer = gl.createRenderbuffer()");
gl.bindRenderbuffer(gl.RENDERBUFFER, depthBuffer);
gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, width, height);
-shouldBe("gl.getError()", "gl.NO_ERROR");
+glErrorShouldBe(gl, gl.NO_ERROR);
shouldBeNonNull("stencilBuffer = gl.createRenderbuffer()");
gl.bindRenderbuffer(gl.RENDERBUFFER, stencilBuffer);
gl.renderbufferStorage(gl.RENDERBUFFER, gl.STENCIL_INDEX8, width, height);
-shouldBe("gl.getError()", "gl.NO_ERROR");
+glErrorShouldBe(gl, gl.NO_ERROR);
shouldBeNonNull("depthStencilBuffer = gl.createRenderbuffer()");
gl.bindRenderbuffer(gl.RENDERBUFFER, depthStencilBuffer);
gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height);
-shouldBe("gl.getError()", "gl.NO_ERROR");
+glErrorShouldBe(gl, gl.NO_ERROR);
debug("Attach depth using DEPTH_ATTACHMENT");
testAttachment(gl.DEPTH_ATTACHMENT, depthBuffer, false);
@@ -119,6 +138,9 @@ testColorRenderbuffer(gl.RGB5_A1);
debug("Attach color renderbuffer with internalformat == RGB565");
testColorRenderbuffer(gl.RGB565);
+debug("Create and attach depthStencil renderbuffer");
+testDepthStencilRenderbuffer();
+
successfullyParsed = true;
</script>
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 208d9ef..8387935 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,27 @@
+2010-11-03 Zhenyao Mo <zmo at google.com>
+
+ Reviewed by Kenneth Russell.
+
+ renderbufferStorage(DEPTH_STENCIL) shouldn't generate an error
+ https://bugs.webkit.org/show_bug.cgi?id=48891
+
+ * html/canvas/WebGLFramebuffer.cpp:
+ (WebCore::WebGLFramebuffer::isIncomplete): Considering the case where DEPTH_STENCIL is not supported.
+ * html/canvas/WebGLRenderbuffer.cpp:
+ (WebCore::WebGLRenderbuffer::WebGLRenderbuffer): Init added members.
+ * html/canvas/WebGLRenderbuffer.h: Add members and accessor functions.
+ (WebCore::WebGLRenderbuffer::setInternalFormat):
+ (WebCore::WebGLRenderbuffer::setSize):
+ (WebCore::WebGLRenderbuffer::getWidth):
+ (WebCore::WebGLRenderbuffer::getHeight):
+ (WebCore::WebGLRenderbuffer::setIsValid):
+ (WebCore::WebGLRenderbuffer::isValid):
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::initializeNewContext): Check if packed_depth_stencil extension exists.
+ (WebCore::WebGLRenderingContext::getRenderbufferParameter): Simulate the case for DEPTH_STENCIL where packed_depth_stencil is not supported.
+ (WebCore::WebGLRenderingContext::renderbufferStorage): Bypass the call if packed_depth_stencil is not supported.
+ * html/canvas/WebGLRenderingContext.h:
+
2010-11-04 Kavita Kanetkar <kkanetkar at chromium.org>
Reviewed by Adam Barth.
diff --git a/WebCore/html/canvas/WebGLFramebuffer.cpp b/WebCore/html/canvas/WebGLFramebuffer.cpp
index 787b181..76a4675 100644
--- a/WebCore/html/canvas/WebGLFramebuffer.cpp
+++ b/WebCore/html/canvas/WebGLFramebuffer.cpp
@@ -57,6 +57,15 @@ namespace {
(reinterpret_cast<WebGLRenderbuffer*>(attachedObject))->setInitialized();
}
+ bool isValid(WebGLObject* attachedObject)
+ {
+ if (attachedObject && attachedObject->object() && attachedObject->isRenderbuffer()) {
+ if (!(reinterpret_cast<WebGLRenderbuffer*>(attachedObject))->isValid())
+ return false;
+ }
+ return true;
+ }
+
} // anonymous namespace
PassRefPtr<WebGLFramebuffer> WebGLFramebuffer::create(WebGLRenderingContext* ctx)
@@ -142,7 +151,8 @@ bool WebGLFramebuffer::isIncomplete() const
count++;
}
if (isDepthStencilAttached()) {
- if (getInternalFormat(m_depthStencilAttachment.get()) != GraphicsContext3D::DEPTH_STENCIL)
+ if (getInternalFormat(m_depthStencilAttachment.get()) != GraphicsContext3D::DEPTH_STENCIL
+ || !isValid(m_depthStencilAttachment.get()))
return true;
count++;
}
diff --git a/WebCore/html/canvas/WebGLRenderbuffer.cpp b/WebCore/html/canvas/WebGLRenderbuffer.cpp
index 4772873..b9efd47 100644
--- a/WebCore/html/canvas/WebGLRenderbuffer.cpp
+++ b/WebCore/html/canvas/WebGLRenderbuffer.cpp
@@ -42,6 +42,9 @@ WebGLRenderbuffer::WebGLRenderbuffer(WebGLRenderingContext* ctx)
: WebGLObject(ctx)
, m_internalFormat(GraphicsContext3D::RGBA4)
, m_initialized(false)
+ , m_width(0)
+ , m_height(0)
+ , m_isValid(true)
{
setObject(context()->graphicsContext3D()->createRenderbuffer());
}
diff --git a/WebCore/html/canvas/WebGLRenderbuffer.h b/WebCore/html/canvas/WebGLRenderbuffer.h
index cfa26d3..9a23ca5 100644
--- a/WebCore/html/canvas/WebGLRenderbuffer.h
+++ b/WebCore/html/canvas/WebGLRenderbuffer.h
@@ -44,9 +44,19 @@ public:
m_internalFormat = internalformat;
m_initialized = false;
}
-
unsigned long getInternalFormat() const { return m_internalFormat; }
+ void setSize(unsigned long width, unsigned long height)
+ {
+ m_width = width;
+ m_height = height;
+ }
+ unsigned long getWidth() const { return m_width; }
+ unsigned long getHeight() const { return m_height; }
+
+ void setIsValid(bool isValid) { m_isValid = isValid; }
+ bool isValid() const { return m_isValid; }
+
bool isInitialized() const { return m_initialized; }
void setInitialized() { m_initialized = true; }
@@ -60,6 +70,8 @@ private:
unsigned long m_internalFormat;
bool m_initialized;
+ unsigned long m_width, m_height;
+ bool m_isValid; // This is only false if internalFormat is DEPTH_STENCIL and packed_depth_stencil is not supported.
};
} // namespace WebCore
diff --git a/WebCore/html/canvas/WebGLRenderingContext.cpp b/WebCore/html/canvas/WebGLRenderingContext.cpp
index f53f009..5936fe7 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.cpp
+++ b/WebCore/html/canvas/WebGLRenderingContext.cpp
@@ -34,6 +34,7 @@
#include "CheckedInt.h"
#include "Console.h"
#include "DOMWindow.h"
+#include "Extensions3D.h"
#include "FrameView.h"
#include "HTMLCanvasElement.h"
#include "HTMLImageElement.h"
@@ -155,6 +156,12 @@ void WebGLRenderingContext::initializeNewContext()
createFallbackBlackTextures1x1();
if (!isGLES2Compliant())
initVertexAttrib0();
+
+ if (isGLES2Compliant())
+ m_isDepthStencilSupported = m_context->getExtensions()->supports("GL_OES_packed_depth_stencil");
+ else
+ m_isDepthStencilSupported = m_context->getExtensions()->supports("GL_EXT_packed_depth_stencil");
+
m_context->reshape(canvas()->width(), canvas()->height());
m_context->viewport(0, 0, canvas()->width(), canvas()->height());
}
@@ -1651,6 +1658,42 @@ WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(unsigned long targe
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
return WebGLGetInfo();
}
+ if (!m_renderbufferBinding || !m_renderbufferBinding->object()) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
+ return WebGLGetInfo();
+ }
+
+ if (m_renderbufferBinding->getInternalFormat() == GraphicsContext3D::DEPTH_STENCIL
+ && !m_renderbufferBinding->isValid()) {
+ ASSERT(!m_isDepthStencilSupported);
+ long value = 0;
+ switch (pname) {
+ case GraphicsContext3D::RENDERBUFFER_WIDTH:
+ value = static_cast<long>(m_renderbufferBinding->getWidth());
+ break;
+ case GraphicsContext3D::RENDERBUFFER_HEIGHT:
+ value = static_cast<long>(m_renderbufferBinding->getHeight());
+ break;
+ case GraphicsContext3D::RENDERBUFFER_RED_SIZE:
+ case GraphicsContext3D::RENDERBUFFER_GREEN_SIZE:
+ case GraphicsContext3D::RENDERBUFFER_BLUE_SIZE:
+ case GraphicsContext3D::RENDERBUFFER_ALPHA_SIZE:
+ value = 0;
+ break;
+ case GraphicsContext3D::RENDERBUFFER_DEPTH_SIZE:
+ value = 24;
+ break;
+ case GraphicsContext3D::RENDERBUFFER_STENCIL_SIZE:
+ value = 8;
+ break;
+ case GraphicsContext3D::RENDERBUFFER_INTERNAL_FORMAT:
+ return WebGLGetInfo(m_renderbufferBinding->getInternalFormat());
+ default:
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
+ return WebGLGetInfo();
+ }
+ return WebGLGetInfo(value);
+ }
WebGLStateRestorer(this, false);
int value = 0;
@@ -1666,10 +1709,6 @@ WebGLGetInfo WebGLRenderingContext::getRenderbufferParameter(unsigned long targe
m_context->getRenderbufferParameteriv(target, pname, &value);
return WebGLGetInfo(static_cast<long>(value));
case GraphicsContext3D::RENDERBUFFER_INTERNAL_FORMAT:
- if (!m_renderbufferBinding) {
- m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
- return WebGLGetInfo();
- }
return WebGLGetInfo(m_renderbufferBinding->getInternalFormat());
default:
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
@@ -2184,18 +2223,34 @@ void WebGLRenderingContext::renderbufferStorage(unsigned long target, unsigned l
{
if (isContextLost())
return;
+ if (target != GraphicsContext3D::RENDERBUFFER) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
+ return;
+ }
+ if (!m_renderbufferBinding || !m_renderbufferBinding->object()) {
+ m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
+ return;
+ }
switch (internalformat) {
case GraphicsContext3D::DEPTH_COMPONENT16:
case GraphicsContext3D::RGBA4:
case GraphicsContext3D::RGB5_A1:
case GraphicsContext3D::RGB565:
case GraphicsContext3D::STENCIL_INDEX8:
- case GraphicsContext3D::DEPTH_STENCIL:
m_context->renderbufferStorage(target, internalformat, width, height);
- if (m_renderbufferBinding)
- m_renderbufferBinding->setInternalFormat(internalformat);
+ m_renderbufferBinding->setInternalFormat(internalformat);
+ m_renderbufferBinding->setIsValid(true);
cleanupAfterGraphicsCall(false);
break;
+ case GraphicsContext3D::DEPTH_STENCIL:
+ if (m_isDepthStencilSupported) {
+ m_context->renderbufferStorage(target, internalformat, width, height);
+ cleanupAfterGraphicsCall(false);
+ } else
+ m_renderbufferBinding->setSize(width, height);
+ m_renderbufferBinding->setIsValid(m_isDepthStencilSupported);
+ m_renderbufferBinding->setInternalFormat(internalformat);
+ break;
default:
m_context->synthesizeGLError(GraphicsContext3D::INVALID_ENUM);
}
diff --git a/WebCore/html/canvas/WebGLRenderingContext.h b/WebCore/html/canvas/WebGLRenderingContext.h
index 912a2ef..99d2c79 100644
--- a/WebCore/html/canvas/WebGLRenderingContext.h
+++ b/WebCore/html/canvas/WebGLRenderingContext.h
@@ -431,6 +431,8 @@ public:
long m_stencilFuncRef; // Note that this is the user specified value, not the internal clamped value.
unsigned long m_stencilFuncMask;
+ bool m_isDepthStencilSupported;
+
// Helpers for getParameter and others
WebGLGetInfo getBooleanParameter(unsigned long pname);
WebGLGetInfo getBooleanArrayParameter(unsigned long pname);
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list