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