| 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>
|
|
|