
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Verifies that GL framebuffer bindings do not change when canvas is resized</title>
<script src="../../../resources/js-test.js"></script>
<script src="resources/webgl-test.js"></script>
<script src="resources/webgl-test-utils.js"></script>
</head>
<body>
<canvas id="example" width="4px" height="4px"></canvas>
<div id="description"></div>
<div id="console"></div>
<script>
description("Verifies that GL framebuffer bindings do not change when canvas is resized");

if (window.initNonKhronosFramework) {
  window.initNonKhronosFramework(true);
}

var err;
var wtu = WebGLTestUtils;
var canvas = document.getElementById("example");
var gl = wtu.create3DContext(canvas);
var green = [0, 255, 0, 255];
var blue = [0, 0, 255, 255];
var fboSize = 2;
shouldBeTrue("fboSize < canvas.width");
var fbo = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
var fboTex = gl.createTexture();
gl.activeTexture(gl.TEXTURE1);
gl.bindTexture(gl.TEXTURE_2D, fboTex);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, fboTex, 0);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, fboSize, fboSize, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
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);
shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_COMPLETE");

function checkFBO(color, msg) {
  wtu.checkCanvasRect(gl, 0, 0, fboSize, fboSize, color, msg);
  wtu.checkCanvasRect(gl, fboSize, fboSize, fboSize, fboSize, [0, 0, 0, 0], "area outside fbo should be transparent black");
}

// The FBO is 2x2 and it's bound so clearing should clear a 2x2 area
// and calling read pixels should read the clear color in that 2x2 area
// and 0,0,0,0 outside that area.
//
// If the FBO is no longer bound because of a WebGL implementation error
// then likely the clear will clear the backbuffer and reading outside
// the 2x2 area will not be 0,0,0,0

function test() {
  gl.clearColor(0, 0, 1, 1);
  gl.clear(gl.COLOR_BUFFER_BIT);
  checkFBO(blue, "should be blue");
  gl.clearColor(0, 1, 0, 1);
  gl.clear(gl.COLOR_BUFFER_BIT);
  checkFBO(green, "should be green");
}

debug("test before resizing canvas");
test();
debug("test after resizing canvas");
canvas.width = 8;
test();
debug("test after resizing canvas and waiting for compositing");
canvas.width = 16;
wtu.waitFrames(5, function() {
  test();
  glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors.");
  finishTest();
});
</script>
</body>
</html>

