tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

invalid-vertex-attrib-test.js (3556B)


      1 var createInvalidAttribTestFn = (function() {
      2 
      3 async function testPreserveDrawingBufferTrue(gl, drawFn, clear) {
      4  debug('');
      5  debug(`test preserveDrawingBuffer: true with ${drawFn.name} ${clear ? 'with' : 'without'} clear`);
      6 
      7  if (clear) {
      8    gl.clearColor(0, 0, 0, 0);
      9    gl.clear(gl.COLOR_BUFFER_BIT);
     10  }
     11 
     12  const skipTest = drawFn(gl);
     13  if (skipTest) {
     14    debug('skipped: extension does not exist');
     15    return;
     16  }
     17 
     18  wtu.checkCanvas(gl, [255, 0, 0, 255], "canvas should be red");
     19 
     20  await waitForComposite();
     21 
     22  wtu.checkCanvas(gl, [255, 0, 0, 255], "canvas should be red");
     23  wtu.glErrorShouldBe(gl, gl.NO_ERROR, "there should be no errors");
     24 }
     25 
     26 function setupWebGL({
     27    webglVersion,
     28    shadersFn,
     29    attribs,
     30 }) {
     31    const positionBuf = gl.createBuffer();
     32    gl.bindBuffer(gl.ARRAY_BUFFER, positionBuf);
     33    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
     34      -1, -1,
     35       1, -1,
     36      -1,  1,
     37      -1,  1,
     38       1, -1,
     39       1,  1,
     40    ]), gl.STATIC_DRAW);
     41    gl.enableVertexAttribArray(0);
     42    gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
     43    const indexBuf = gl.createBuffer();
     44    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuf);
     45    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint8Array([0, 1, 2, 3, 4, 5]), gl.STATIC_DRAW);
     46    return gl;
     47 }
     48 
     49 function createInvalidAttribTestFn(gl) {
     50  const vs = `
     51  attribute vec4 vPosition;
     52  void main()
     53  {
     54      gl_Position = vPosition;
     55  }
     56  `;
     57 
     58  const fs = `
     59  precision mediump float;
     60  void main()
     61  {
     62      gl_FragColor = vec4(1, 0, 0, 1);
     63  }
     64  `
     65 
     66  const program = wtu.setupProgram(gl, [vs, fs], ["vPosition"]);
     67  if (!program) {
     68    debug(`program failed to compile: ${wtu.getLastError()}`);
     69  }
     70 
     71  const positionBuffer = gl.createBuffer();
     72  gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
     73  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
     74    -1, -1,
     75     1, -1,
     76    -1,  1,
     77    -1,  1,
     78     1, -1,
     79     1,  1,
     80  ]), gl.STATIC_DRAW);
     81 
     82  const indexBuffer = gl.createBuffer();
     83  gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
     84  gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,
     85                new Uint8Array([0, 1, 2, 3, 4, 5]),
     86                gl.STATIC_DRAW);
     87 
     88  return async function invalidAttribTestFn(drawFn) {
     89    debug('');
     90 
     91    // reset attribs
     92    gl.bindBuffer(gl.ARRAY_BUFFER, null);
     93    const numAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);
     94    for (let i = 0; i < numAttribs; ++i) {
     95      gl.disableVertexAttribArray(i);
     96      gl.vertexAttribPointer(1, 1, gl.FLOAT, false, 0, 0);
     97    }
     98 
     99    debug(`test ${drawFn.name} draws with valid attributes`);
    100    gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
    101    gl.enableVertexAttribArray(0);
    102    gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
    103    wtu.glErrorShouldBe(gl, gl.NO_ERROR, "there should be no errors");
    104 
    105    gl.clearColor(0, 0, 0, 0,);
    106    gl.clear(gl.COLOR_BUFFER_BIT);
    107    wtu.checkCanvas(gl, [0, 0, 0, 0], "canvas should be zero");
    108 
    109    drawFn(gl);
    110 
    111    wtu.checkCanvas(gl, [255, 0, 0, 255], "canvas should be red");
    112    wtu.glErrorShouldBe(gl, gl.NO_ERROR, "there should be no errors");
    113 
    114    debug(`test ${drawFn.name} generates INVALID_OPERATION draws with enabled attribute no buffer bound`);
    115    gl.enableVertexAttribArray(1);
    116 
    117    gl.clearColor(0, 0, 0, 0,);
    118    gl.clear(gl.COLOR_BUFFER_BIT);
    119    wtu.checkCanvas(gl, [0, 0, 0, 0], "canvas should be zero");
    120 
    121    drawFn(gl);
    122 
    123    wtu.glErrorShouldBe(gl, gl.INVALID_OPERATION, "should generate INVALID_OPERATION");
    124    wtu.checkCanvas(gl, [0, 0, 0, 0], "canvas should be zero");
    125  };
    126 }
    127 
    128 return createInvalidAttribTestFn;
    129 }());