<html>
<head>
<meta charset="utf-8">
<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 texture bindings do not change when canvas is resized');

var err;
var wtu = WebGLTestUtils;
var canvas = document.getElementById("example");
var gl = wtu.create3DContext(canvas);
var program = wtu.setupTexturedQuad(gl);

var green = [0, 255, 0, 255];
var blue = [0, 0, 255, 255];
var tex0 = gl.createTexture();
wtu.fillTexture(gl, tex0, 1, 1, blue, 0);
gl.activeTexture(gl.TEXTURE1)
var tex1 = gl.createTexture();
wtu.fillTexture(gl, tex1, 1, 1, green, 0);

var loc = gl.getUniformLocation(program, "tex");

function test() {
  gl.viewport(0, 0, canvas.width, canvas.height);
  gl.uniform1i(loc, 0);
  wtu.drawQuad(gl);
  wtu.checkCanvas(gl, blue, "should be blue");
  gl.uniform1i(loc, 1);
  wtu.drawQuad(gl);
  wtu.checkCanvas(gl, green, "should be green");
}

debug("test before resizing canvas");
test();
debug("test after resizing canvas");
canvas.width = 8;
test();
</script>
</body>
</html>

