<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>WebGL uniformMatrix Conformance Tests</title>
<script src="../../../resources/js-test.js"></script>
<script src="resources/webgl-test.js"></script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<canvas id="example" width="2" height="2"> </canvas>

<script id="vshader" type="x-shader/x-vertex">
attribute vec4 vPosition;
uniform mat4 world4;
uniform mat3 world3;
uniform mat2 world2;
void main()
{
  gl_Position = vec4(vPosition.xyz, world3[0].x + world2[0].x) * world4;
}
</script>

<script id="fshader" type="x-shader/x-fragment">
void main()
{
  gl_FragColor = vec4(1.0,0.0,0.0,1.0);
}
</script>

<script>
description("This test ensures WebGL implementations handle uniformMatrix in a OpenGL ES 2.0 spec compliant way");

debug("");
debug("Checking gl.uniformMatrix.");

if (window.internals)
    window.internals.settings.setWebGLErrorsToConsoleEnabled(false);

gl = initWebGL("example", "vshader", "fshader", [ "vPosition"], [ 0, 0, 0, 1 ], 1);
for (var ii = 2; ii <= 4; ++ii) {
  var loc = gl.getUniformLocation(gl.program, "world" + ii);
  var matLess = [];
  for (var jj = 0; jj < ii; ++jj) {
    for (var ll = 0; ll < ii; ++ll) {
      if (jj == ii - 1 && ll == ii - 1)
        continue;
      matLess[jj * ii + ll] = (jj == ll) ? 1 : 0;
    }
  }
  var mat = matLess.concat([1]);
  var matMore = mat.concat([1]);
  name = "uniformMatrix" + ii + "fv";
  gl[name](loc, false, matLess);
  glErrorShouldBe(gl, gl.INVALID_VALUE, "should fail with insufficient array size for " + name);
  gl[name](loc, false, mat);
  glErrorShouldBe(gl, gl.NO_ERROR, "should succeed with correct array size for " + name);
  gl[name](loc, false, matMore);
  glErrorShouldBe(gl, gl.INVALID_VALUE, "should fail with more than 1 array size for " + name);

  mat[ii * ii - 1] = 1;
  gl[name](loc, false, mat);
  glErrorShouldBe(gl, gl.NO_ERROR, "can call " + name + "with transpose = false");
  gl[name](loc, true, mat);
  glErrorShouldBe(gl, gl.INVALID_VALUE, name + " should return INVALID_VALUE with transpose = true");
}

debug("");

</script>
</body>
</html>
