2010-04-22 Zhenyao Mo <zmo@google.com>
authoreric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 22 Apr 2010 17:04:06 +0000 (17:04 +0000)
committereric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 22 Apr 2010 17:04:06 +0000 (17:04 +0000)
        Reviewed by Dimitri Glazkov.

        Regression: framebufferRenderbuffer crashes with null renderBuffer
        https://bugs.webkit.org/show_bug.cgi?id=37963

        * fast/canvas/webgl/framebuffer-object-attachment-expected.txt: Adding test cases for null renderbuffer input.
        * fast/canvas/webgl/framebuffer-object-attachment.html: Ditto.
2010-04-22  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Regression: framebufferRenderbuffer crashes with null renderBuffer
        https://bugs.webkit.org/show_bug.cgi?id=37963

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer): Dealing with null renderbuffer input.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@58103 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/canvas/webgl/framebuffer-object-attachment-expected.txt
LayoutTests/fast/canvas/webgl/framebuffer-object-attachment.html
WebCore/ChangeLog
WebCore/html/canvas/WebGLRenderingContext.cpp

index 90e17c8..cddcbdb 100644 (file)
@@ -2,6 +2,16 @@
 
         Reviewed by Dimitri Glazkov.
 
+        Regression: framebufferRenderbuffer crashes with null renderBuffer
+        https://bugs.webkit.org/show_bug.cgi?id=37963
+
+        * fast/canvas/webgl/framebuffer-object-attachment-expected.txt: Adding test cases for null renderbuffer input.
+        * fast/canvas/webgl/framebuffer-object-attachment.html: Ditto.
+
+2010-04-22  Zhenyao Mo  <zmo@google.com>
+
+        Reviewed by Dimitri Glazkov.
+
         Emulate GL_IMPLEMENTATION_COLOR_READ_FORMAT/TYPE for glGet
         https://bugs.webkit.org/show_bug.cgi?id=37281
 
index 1a755e5..7957d43 100644 (file)
@@ -41,26 +41,38 @@ 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.INVALID_OPERATION
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
 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.INVALID_OPERATION
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
 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.INVALID_OPERATION
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
 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.INVALID_OPERATION
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
 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.INVALID_OPERATION
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
 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.INVALID_OPERATION
+PASS gl.getError() is gl.NO_ERROR
+PASS gl.getError() is gl.NO_ERROR
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 74674ef..632c592 100644 (file)
@@ -34,6 +34,13 @@ function testAttachments(attachment0, buffer0, attachment1, buffer1, isConflicte
     shouldBe("gl.getError()", "gl.NO_ERROR");
     gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment1, gl.RENDERBUFFER, buffer1);
     shouldBe("gl.getError()", isConflicted ? "gl.INVALID_OPERATION" : "gl.NO_ERROR");
+    if (isConflicted) {
+        // Detach buffer0 first using a null object, then attaching buffer1 should succeed.
+        gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment0, gl.RENDERBUFFER, null);
+        shouldBe("gl.getError()", "gl.NO_ERROR");
+        gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment1, gl.RENDERBUFFER, buffer1);
+        shouldBe("gl.getError()", "gl.NO_ERROR");
+    }
 }
 
 description("Test framebuffer object attachment behaviors");
index c56c3ee..1fa1f6b 100644 (file)
@@ -2,6 +2,16 @@
 
         Reviewed by Dimitri Glazkov.
 
+        Regression: framebufferRenderbuffer crashes with null renderBuffer
+        https://bugs.webkit.org/show_bug.cgi?id=37963
+
+        * html/canvas/WebGLRenderingContext.cpp:
+        (WebCore::WebGLRenderingContext::framebufferRenderbuffer): Dealing with null renderbuffer input.
+
+2010-04-22  Zhenyao Mo  <zmo@google.com>
+
+        Reviewed by Dimitri Glazkov.
+
         Emulate GL_IMPLEMENTATION_COLOR_READ_FORMAT/TYPE for glGet
         https://bugs.webkit.org/show_bug.cgi?id=37281
 
index 5c1542e..a9db06c 100644 (file)
@@ -813,7 +813,7 @@ void WebGLRenderingContext::framebufferRenderbuffer(unsigned long target, unsign
         m_context->synthesizeGLError(GraphicsContext3D::INVALID_OPERATION);
         return;
     }
-    if (buffer->object()) {
+    if (buffer && buffer->object()) {
         bool isConflicted = false;
         bool isDepthOrStencil = true;
         switch (attachment) {