tor-browser

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

gl-vertex-attrib.js (12928B)


      1 /*
      2 Copyright (c) 2019 The Khronos Group Inc.
      3 Use of this source code is governed by an MIT-style license that can be
      4 found in the LICENSE.txt file.
      5 */
      6 
      7 // This test relies on the surrounding web page defining a variable
      8 // "contextVersion" which indicates what version of WebGL it's running
      9 // on -- 1 for WebGL 1.0, 2 for WebGL 2.0, etc.
     10 
     11 "use strict";
     12 description("This test ensures WebGL implementations vertexAttrib can be set and read.");
     13 
     14 debug("");
     15 debug("Canvas.getContext");
     16 
     17 var wtu = WebGLTestUtils;
     18 var gl = wtu.create3DContext("canvas", undefined, contextVersion);
     19 if (!gl) {
     20  testFailed("context does not exist");
     21 } else {
     22  testPassed("context exists");
     23 
     24  debug("");
     25  debug("Checking gl.vertexAttrib.");
     26 
     27  var numVertexAttribs = gl.getParameter(gl.MAX_VERTEX_ATTRIBS);
     28  for (var ii = 0; ii < numVertexAttribs; ++ii) {
     29    gl.vertexAttrib1fv(ii, [1]);
     30    shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Float32Array');
     31    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '1');
     32    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '0');
     33    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '0');
     34    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '1');
     35 
     36    gl.vertexAttrib1fv(ii, new Float32Array([-1]));
     37    shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Float32Array');
     38    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '-1');
     39    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '0');
     40    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '0');
     41    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '1');
     42 
     43    gl.vertexAttrib2fv(ii, [1, 2]);
     44    shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Float32Array');
     45    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '1');
     46    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '2');
     47    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '0');
     48    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '1');
     49 
     50    gl.vertexAttrib2fv(ii, new Float32Array([1, -2]));
     51    shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Float32Array');
     52    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '1');
     53    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '-2');
     54    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '0');
     55    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '1');
     56 
     57    gl.vertexAttrib3fv(ii, [1, 2, 3]);
     58    shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Float32Array');
     59    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '1');
     60    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '2');
     61    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '3');
     62    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '1');
     63 
     64    gl.vertexAttrib3fv(ii, new Float32Array([1, -2, 3]));
     65    shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Float32Array');
     66    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '1');
     67    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '-2');
     68    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '3');
     69    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '1');
     70 
     71    gl.vertexAttrib4fv(ii, [1, 2, 3, 4]);
     72    shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Float32Array');
     73    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '1');
     74    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '2');
     75    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '3');
     76    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '4');
     77 
     78    gl.vertexAttrib4fv(ii, new Float32Array([1, 2, -3, 4]));
     79    shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Float32Array');
     80    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '1');
     81    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '2');
     82    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '-3');
     83    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '4');
     84 
     85    gl.vertexAttrib1f(ii, 5);
     86    shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Float32Array');
     87    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '5');
     88    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '0');
     89    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '0');
     90    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '1');
     91 
     92    gl.vertexAttrib2f(ii, 6, 7);
     93    shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Float32Array');
     94    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '6');
     95    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '7');
     96    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '0');
     97    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '1');
     98 
     99    gl.vertexAttrib3f(ii, 7, 8, 9);
    100    shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Float32Array');
    101    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '7');
    102    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '8');
    103    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '9');
    104    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '1');
    105 
    106    gl.vertexAttrib4f(ii, 6, 7, 8, 9);
    107    shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Float32Array');
    108    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '6');
    109    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '7');
    110    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '8');
    111    shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '9');
    112 
    113    if (contextVersion > 1) {
    114      gl.vertexAttribI4i(ii, -1, 0, 1, 2);
    115      shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Int32Array');
    116      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '-1');
    117      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '0');
    118      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '1');
    119      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '2');
    120 
    121      gl.vertexAttribI4ui(ii, 0, 1, 2, 3);
    122      shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Uint32Array');
    123      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '0');
    124      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '1');
    125      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '2');
    126      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '3');
    127 
    128      gl.vertexAttribI4iv(ii, [-1, 0, 1, 2]);
    129      shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Int32Array');
    130      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '-1');
    131      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '0');
    132      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '1');
    133      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '2');
    134 
    135      gl.vertexAttribI4iv(ii, new Int32Array([1, 0, -1, 2]));
    136      shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Int32Array');
    137      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '1');
    138      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '0');
    139      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '-1');
    140      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '2');
    141 
    142      gl.vertexAttribI4uiv(ii, [0, 1, 2, 3]);
    143      shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Uint32Array');
    144      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '0');
    145      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '1');
    146      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '2');
    147      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '3');
    148 
    149      gl.vertexAttribI4uiv(ii, new Uint32Array([0, 2, 1, 3]));
    150      shouldBeType('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)', 'Uint32Array');
    151      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[0]', '0');
    152      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[1]', '2');
    153      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[2]', '1');
    154      shouldBe('gl.getVertexAttrib(' + ii + ', gl.CURRENT_VERTEX_ATTRIB)[3]', '3');
    155    }
    156  }
    157  wtu.glErrorShouldBe(gl, gl.NO_ERROR);
    158 
    159  debug("");
    160  debug("Checking out-of-range vertexAttrib index");
    161  gl.getVertexAttrib(numVertexAttribs, gl.CURRENT_VERTEX_ATTRIB);
    162  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    163 
    164  gl.vertexAttrib1fv(numVertexAttribs, [1]);
    165  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    166 
    167  gl.vertexAttrib1fv(numVertexAttribs, new Float32Array([-1]));
    168  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    169 
    170  gl.vertexAttrib2fv(numVertexAttribs, [1, 2]);
    171  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    172 
    173  gl.vertexAttrib2fv(numVertexAttribs, new Float32Array([1, -2]));
    174  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    175 
    176  gl.vertexAttrib3fv(numVertexAttribs, [1, 2, 3]);
    177  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    178 
    179  gl.vertexAttrib3fv(numVertexAttribs, new Float32Array([1, -2, 3]));
    180  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    181 
    182  gl.vertexAttrib4fv(numVertexAttribs, [1, 2, 3, 4]);
    183  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    184 
    185  gl.vertexAttrib4fv(numVertexAttribs, new Float32Array([1, 2, -3, 4]));
    186  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    187 
    188  gl.vertexAttrib1f(numVertexAttribs, 5);
    189  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    190 
    191  gl.vertexAttrib2f(numVertexAttribs, 6, 7);
    192  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    193 
    194  gl.vertexAttrib3f(numVertexAttribs, 7, 8, 9);
    195  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    196 
    197  gl.vertexAttrib4f(numVertexAttribs, 6, 7, 8, 9);
    198  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    199 
    200  if (contextVersion > 1) {
    201    gl.vertexAttribI4i(numVertexAttribs, -1, 0, 1, 2);
    202    wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    203 
    204    gl.vertexAttribI4ui(numVertexAttribs, 0, 1, 2, 3);
    205    wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    206 
    207    gl.vertexAttribI4iv(numVertexAttribs, [-1, 0, 1, 2]);
    208    wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    209 
    210    gl.vertexAttribI4iv(numVertexAttribs, new Int32Array([1, 0, -1, 2]));
    211    wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    212 
    213    gl.vertexAttribI4uiv(numVertexAttribs, [0, 1, 2, 3]);
    214    wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    215 
    216    gl.vertexAttribI4uiv(numVertexAttribs, new Uint32Array([0, 2, 1, 3]));
    217    wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    218  }
    219 
    220  debug("");
    221  debug("Checking invalid array lengths");
    222  numVertexAttribs = numVertexAttribs - 1;
    223  gl.vertexAttrib1fv(numVertexAttribs, []);
    224  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    225 
    226  gl.vertexAttrib1fv(numVertexAttribs, new Float32Array([]));
    227  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    228 
    229  gl.vertexAttrib2fv(numVertexAttribs, [1]);
    230  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    231 
    232  gl.vertexAttrib2fv(numVertexAttribs, new Float32Array([1]));
    233  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    234 
    235  gl.vertexAttrib3fv(numVertexAttribs, [1, 2]);
    236  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    237 
    238  gl.vertexAttrib3fv(numVertexAttribs, new Float32Array([1, -2]));
    239  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    240 
    241  gl.vertexAttrib4fv(numVertexAttribs, [1, 2, 3]);
    242  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    243 
    244  gl.vertexAttrib4fv(numVertexAttribs, new Float32Array([1, 2, -3]));
    245  wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    246 
    247  if (contextVersion > 1) {
    248    gl.vertexAttribI4iv(numVertexAttribs, [-1, 0, 1]);
    249    wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    250 
    251    gl.vertexAttribI4iv(numVertexAttribs, new Int32Array([1, 0, -1]));
    252    wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    253 
    254    gl.vertexAttribI4uiv(numVertexAttribs, [0, 1, 2]);
    255    wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    256 
    257    gl.vertexAttribI4uiv(numVertexAttribs, new Uint32Array([0, 2, 1]));
    258    wtu.glErrorShouldBe(gl, gl.INVALID_VALUE);
    259  }
    260 }
    261 
    262 debug("");
    263 var successfullyParsed = true;