| <canvas id="canvas" width="10" height="10"></canvas> |
| <div></div> |
| <script id='vertex-shader' type='x-shader/x-vertex'> |
| attribute vec3 position; |
| void main(void) { |
| gl_Position = vec4(position, 1.0); |
| } |
| </script> |
| <script id='fragment-shader' type='x-shader/x-fragment'> |
| precision mediump float; |
| void main(void) { |
| gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0); |
| } |
| </script> |
| <script> |
| function output(msg) { |
| document.querySelector("div").innerHTML += msg + "<br>"; |
| } |
| |
| if (window.testRunner) |
| testRunner.dumpAsText(); |
| |
| let canvas = document.getElementById("canvas"); |
| let gl = canvas.getContext("webgl"); |
| |
| gl.getExtension("OES_element_index_uint"); |
| |
| let vShader = gl.createShader(gl.VERTEX_SHADER); |
| gl.shaderSource(vShader, document.getElementById("vertex-shader").text); |
| gl.compileShader(vShader); |
| |
| let fShader = gl.createShader(gl.FRAGMENT_SHADER); |
| gl.shaderSource(fShader, document.getElementById("fragment-shader").text); |
| gl.compileShader(fShader); |
| program = gl.createProgram(); |
| gl.attachShader(program, vShader); |
| gl.attachShader(program, fShader); |
| gl.linkProgram(program); |
| gl.useProgram(program); |
| |
| let buffer = gl.createBuffer(); |
| gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer); |
| |
| let data; |
| |
| // Maximum uint. |
| data = new Uint8Array([255, 255, 255, 255]); |
| gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, gl.DYNAMIC_DRAW); |
| gl.drawElements(gl.TRIANGLE_STRIP, 1, gl.UNSIGNED_INT,0); |
| |
| if (gl.getError() == gl.INVALID_OPERATION) |
| output("PASS: MAX_UINT index was unable to be simulated"); |
| else |
| output("FAIL: MAX_UINT index did not fail validation"); |
| |
| output("PASS: MAX_UINT index did not crash"); |
| |
| // Two large numbers, one of which is smaller than 0.25 * max uint. |
| data = new Uint32Array([380000000, 4294967295]); |
| gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, gl.DYNAMIC_DRAW); |
| gl.drawElements(gl.TRIANGLE_STRIP, 1, gl.UNSIGNED_INT,0); |
| |
| if (gl.getError() == gl.INVALID_OPERATION) |
| output("PASS: Huge index was unable to be simulated"); |
| else |
| output("FAIL: Huge index did not fail validation"); |
| |
| output("PASS: Huge index did not crash"); |
| |
| </script> |
| |