Index: LayoutTests/fast/canvas/webgl/framebuffer-bindings-affected-by-to-data-url.html |
diff --git a/LayoutTests/fast/canvas/webgl/framebuffer-bindings-affected-by-to-data-url.html b/LayoutTests/fast/canvas/webgl/framebuffer-bindings-affected-by-to-data-url.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b322a2b0acbab24da6ef42cf433eacb184d9ec94 |
--- /dev/null |
+++ b/LayoutTests/fast/canvas/webgl/framebuffer-bindings-affected-by-to-data-url.html |
@@ -0,0 +1,72 @@ |
+<!DOCTYPE html> |
+<html> |
+<body> |
+<canvas id="example" width="50" height="50"> |
+</canvas> |
+<div id="description"></div> |
+<div id="console"></div> |
+<script src="../../../resources/js-test.js"></script> |
+<script src="resources/webgl-test.js"></script> |
+<script src="resources/webgl-test-utils.js"></script> |
+<script> |
+"use strict"; |
+var wtu = WebGLTestUtils; |
+description("toDataURL() causes side effect for framebuffer binding. crbug.com/445848"); |
+ |
+function test() { |
+ var glCanvas = document.getElementById("example"); |
+ // crbug.com/445848 bug occurs only on the following webgl configuration. |
+ var gl = wtu.create3DContext(glCanvas, {preserveDrawingBuffer: true, premultipliedAlpha: true}); |
+ // FIXME: context.getContextAttributes().antialias is always false on |
+ // content shell with --dump-render-tree option. See http://crbug.com/375682 |
+ // If antialias is supported, test can be much shorter for crbug.com/445848. |
+ |
+ var program = wtu.setupColorQuad(gl); |
+ |
+ // Clear backbuffer in red. |
+ gl.clearColor(1.0, 0.0, 0.0, 1.0); |
+ gl.clear(gl.COLOR_BUFFER_BIT); |
+ wtu.checkCanvas(gl, [255, 0, 0, 255], "should be red"); |
+ |
+ var fbo = gl.createFramebuffer(); |
+ var tex = gl.createTexture(); |
+ gl.bindTexture(gl.TEXTURE_2D, tex); |
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 50, 50, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); |
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); |
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); |
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); |
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); |
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); |
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0); |
+ if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) != gl.FRAMEBUFFER_COMPLETE) { |
+ finishTest(); |
+ return; |
+ } |
+ |
+ // Clear the FBO in green. |
+ gl.clearColor(0.0, 1.0, 0.0, 1.0); |
+ gl.clear(gl.COLOR_BUFFER_BIT); |
+ |
+ // backbuffer is still in red. |
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null); |
+ wtu.checkCanvas(gl, [255, 0, 0, 255], "should be red"); |
+ gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); |
+ |
+ glCanvas.toDataURL(); |
+ // The second toDataURL binds backbuffer in crbug.com/445848 |
+ glCanvas.toDataURL(); |
+ // It applies to backbuffer, not the FBO. |
+ gl.clear(gl.COLOR_BUFFER_BIT); |
+ |
+ // backbuffer must be in red, not green. |
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null); |
+ wtu.checkCanvas(gl, [255, 0, 0, 255], "should be red"); |
+ |
+ finishTest(); |
+} |
+test(); |
+ |
+var successfullyParsed = true; |
+</script> |
+</body> |
+</html> |