1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
  
     | 
    
      <!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>WebGL test: Drawing without index validation</title>
<script src='/tests/SimpleTest/SimpleTest.js'></script>
<link rel='stylesheet' href='/tests/SimpleTest/test.css'>
<script id='vertSource' type='none'>
void main(void) {
  gl_PointSize = 1.0;
  gl_Position = vec4(0, 0, 0, 1);
}
</script>
<script id='fragSource' type='none'>
precision mediump float;
void main(void) {
  gl_FragColor = vec4(0, 1, 0, 1);
}
</script>
</head>
<body>
<script>
function test() {
  const c = document.createElement('canvas');
  c.width = c.height = 1;
  const gl = c.getContext('webgl');
  if (!gl) {
    todo(false, 'WebGL is unavailable.');
    return;
  }
  document.body.appendChild(c);
  const vs = gl.createShader(gl.VERTEX_SHADER);
  gl.shaderSource(vs, vertSource.innerHTML.trim());
  gl.compileShader(vs);
  const fs = gl.createShader(gl.FRAGMENT_SHADER);
  gl.shaderSource(fs, fragSource.innerHTML.trim());
  gl.compileShader(fs);
  const prog = gl.createProgram();
  gl.attachShader(prog, vs);
  gl.attachShader(prog, fs);
  gl.linkProgram(prog);
  gl.useProgram(prog);
  gl.clearColor(1,0,0,1);
  const pixel = new Uint32Array(1);
  const pixelData = new Uint8Array(pixel.buffer);
  function expectPixel(expected, info) {
    gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixelData);
    ok(pixel[0] == expected,
       '[' + info + '] Expected 0x' + expected.toString(16) + ', was 0x' + pixel[0].toString(16));
  }
  gl.clear(gl.COLOR_BUFFER_BIT);
  expectPixel(0xFF0000FF, 'Clear');
  gl.drawArrays(gl.POINTS, 0, 1);
  expectPixel(0xFF00FF00, 'DrawArrays');
  const indexBuffer = gl.createBuffer();
  gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
  gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array([0]), gl.STATIC_DRAW);
  gl.clear(gl.COLOR_BUFFER_BIT);
  gl.drawElements(gl.POINTS, 1, gl.UNSIGNED_SHORT, 0);
  expectPixel(0xFF00FF00, 'DrawElements');
  SimpleTest.finish();
}
SimpleTest.waitForExplicitFinish();
const prefArrArr = [
  ['webgl.force-index-validation', -1]
];
const prefEnv = {'set': prefArrArr};
SpecialPowers.pushPrefEnv(prefEnv, test);
</script>
</body>
</html> 
     |