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;