58 lines
2.2 KiB
HTML
58 lines
2.2 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<script id='2d-vertex-shader' type='x-shader/x-vertex'>
|
|
attribute vec4 a_Position;
|
|
void main() { gl_Position = a_Position; }
|
|
</script>
|
|
<script id='2d-fragment-shader' type='x-shader/x-fragment'>
|
|
void main( void ) {}
|
|
</script>
|
|
<body>
|
|
<canvas id="canvas1" width="20" height="20"></canvas>
|
|
<script>
|
|
if (window.testRunner)
|
|
testRunner.dumpAsText();
|
|
|
|
// Boilerplate set-up.
|
|
let canvas = document.getElementById('canvas1');
|
|
let gl = canvas.getContext('webgl');
|
|
|
|
let vShader = gl.createShader(gl.VERTEX_SHADER);
|
|
let vShaderScript = document.getElementById('2d-vertex-shader');
|
|
gl.shaderSource(vShader, vShaderScript.text);
|
|
gl.compileShader(vShader);
|
|
|
|
let fShader = gl.createShader(gl.FRAGMENT_SHADER);
|
|
let fShaderScript = document.getElementById('2d-fragment-shader');
|
|
gl.shaderSource(fShader, fShaderScript.text);
|
|
gl.compileShader(fShader);
|
|
|
|
let program = gl.createProgram();
|
|
gl.attachShader(program, vShader);
|
|
gl.attachShader(program, fShader);
|
|
gl.linkProgram(program);
|
|
gl.useProgram(program);
|
|
|
|
gl.getExtension("OES_element_index_uint");
|
|
let ext = gl.getExtension('ANGLE_instanced_arrays');
|
|
|
|
// Execute a draw that is valid, if strange.
|
|
let buffer = gl.createBuffer();
|
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
|
|
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint8ClampedArray([256, 256, 256, 256]), gl.STATIC_DRAW);
|
|
ext.drawElementsInstancedANGLE(gl.TRIANGLES, 2, gl.UNSIGNED_SHORT, 0, gl.UNSIGNED_SHORT);
|
|
|
|
// Execute a draw that is invalid because an element index is too large.
|
|
buffer = gl.createBuffer();
|
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
|
|
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([65536, 137413, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536]), gl.STATIC_DRAW);
|
|
gl.bufferSubData(gl.ELEMENT_ARRAY_BUFFER, 10, new Uint8ClampedArray([256, 256, 256, 256, 256, 256]));
|
|
gl.drawElements(gl.TRIANGLES, 1, gl.UNSIGNED_INT, 0);
|
|
|
|
// Now execute a similarly invalid call, that uses a smaller simulated buffer than the previous invalid call.
|
|
buffer = gl.createBuffer();
|
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer);
|
|
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint8ClampedArray([256, 256, 256, 256, 256, 256]), gl.STATIC_DRAW);
|
|
gl.drawElements(gl.TRIANGLES, 1, gl.UNSIGNED_SHORT, 0);
|
|
</script>
|
|
</html> |