├── README.md ├── demo ├── app.html ├── playback.html └── trace.js └── webgl-recorder.js /README.md: -------------------------------------------------------------------------------- 1 | # WebGL Recorder 2 | 3 | This is a small script that lets you record the WebGL calls of any app for playback later. 4 | Example use case: create an easily reproducible test case of a complex WebGL app that demonstrates a browser bug. 5 | 6 | ## Demo 7 | 8 | 1. Clone this repo 9 | 2. Open [demo/app.html](https://evanw.github.io/webgl-recorder/demo/app.html) in your browser 10 | 3. Wait until you want to stop recording, then click "Download Trace" (recording starts immediately) 11 | 4. Move the saved "trace.js" file next to [demo/playback.html](https://evanw.github.io/webgl-recorder/demo/playback.html) on your local machine 12 | 5. Open [demo/playback.html](https://evanw.github.io/webgl-recorder/demo/playback.html) in your browser to view the playback 13 | 14 | ## Usage 15 | 16 | Add `` to the page containing the WebGL code you want to record. 17 | All WebGL contexts will begin recording immediately. 18 | If `gl` is the `WebGLRenderingContext`, the current trace is accessible off of `gl.trace`. 19 | The trace can be compiled to JavaScript playback code and then downloaded to a file using `gl.downloadTrace()`, or just compiled to a string without downloading using `gl.compileTrace()`. 20 | 21 | ## License 22 | 23 | This code is licensed under [CC0](https://creativecommons.org/publicdomain/zero/1.0/). 24 | -------------------------------------------------------------------------------- /demo/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 71 |

72 | 73 | -------------------------------------------------------------------------------- /demo/playback.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 17 | -------------------------------------------------------------------------------- /demo/trace.js: -------------------------------------------------------------------------------- 1 | function* render(gl) { 2 | // Recorded using https://github.com/evanw/webgl-recorder 3 | var WebGLPrograms = []; 4 | var WebGLBuffers = []; 5 | var WebGLShaders = []; 6 | var WebGLUniformLocations = []; 7 | gl.canvas.width = 300; 8 | gl.canvas.height = 150; 9 | WebGLPrograms[0] = gl.createProgram(); 10 | WebGLBuffers[0] = gl.createBuffer(); 11 | WebGLShaders[0] = gl.createShader(35633); 12 | gl.shaderSource(WebGLShaders[0], "\n attribute vec4 v;\n void main() {\n gl_Position = v;\n }\n"); 13 | gl.compileShader(WebGLShaders[0]); 14 | gl.attachShader(WebGLPrograms[0], WebGLShaders[0]); 15 | WebGLShaders[1] = gl.createShader(35632); 16 | gl.shaderSource(WebGLShaders[1], "\n precision mediump float;\n uniform float t;\n void main() {\n vec3 c;\n vec2 r = vec2(640.0, 480.0);\n float l, z = 4.0 + t;\n for (int i = 0; i < 3; i++) {\n vec2 uv, p = gl_FragCoord.xy / r;\n uv = p;\n p -= 0.5;\n p.x *= r.x / r.y;\n z += 0.07;\n l = length(p);\n uv += p / l * (sin(z) + 1.0) * abs(sin(l * 9.0 - z * 2.0));\n c[i] = 0.01 / length(abs(mod(uv, 1.0) - 0.5));\n }\n gl_FragColor = vec4(c / l, 1.0);\n }\n"); 17 | gl.compileShader(WebGLShaders[1]); 18 | gl.attachShader(WebGLPrograms[0], WebGLShaders[1]); 19 | gl.linkProgram(WebGLPrograms[0]); 20 | gl.useProgram(WebGLPrograms[0]); 21 | WebGLUniformLocations[0] = gl.getUniformLocation(WebGLPrograms[0], "t"); 22 | gl.bindBuffer(34962, WebGLBuffers[0]); 23 | gl.bufferData(34962, new Float32Array([-1,-1,3,-1,-1,3]), 35044); 24 | gl.vertexAttribPointer(0, 2, 5126, false, 0, 0); 25 | gl.enableVertexAttribArray(0); 26 | gl.viewport(0, 0, 640, 480); 27 | gl.canvas.width = 640; 28 | gl.canvas.height = 480; 29 | gl.uniform1f(WebGLUniformLocations[0], 0.14184000000000002); 30 | gl.drawArrays(4, 0, 3); 31 | yield; 32 | gl.uniform1f(WebGLUniformLocations[0], 0.14284000000000002); 33 | gl.drawArrays(4, 0, 3); 34 | yield; 35 | gl.uniform1f(WebGLUniformLocations[0], 0.16382000000000002); 36 | gl.drawArrays(4, 0, 3); 37 | yield; 38 | gl.uniform1f(WebGLUniformLocations[0], 0.18088500000000002); 39 | gl.drawArrays(4, 0, 3); 40 | yield; 41 | gl.uniform1f(WebGLUniformLocations[0], 0.19821000000000003); 42 | gl.drawArrays(4, 0, 3); 43 | yield; 44 | gl.uniform1f(WebGLUniformLocations[0], 0.21493500000000001); 45 | gl.drawArrays(4, 0, 3); 46 | yield; 47 | gl.uniform1f(WebGLUniformLocations[0], 0.23086500000000001); 48 | gl.drawArrays(4, 0, 3); 49 | yield; 50 | gl.uniform1f(WebGLUniformLocations[0], 0.24825500000000003); 51 | gl.drawArrays(4, 0, 3); 52 | yield; 53 | gl.uniform1f(WebGLUniformLocations[0], 0.264235); 54 | gl.drawArrays(4, 0, 3); 55 | yield; 56 | gl.uniform1f(WebGLUniformLocations[0], 0.28149500000000005); 57 | gl.drawArrays(4, 0, 3); 58 | yield; 59 | gl.uniform1f(WebGLUniformLocations[0], 0.297495); 60 | gl.drawArrays(4, 0, 3); 61 | yield; 62 | gl.uniform1f(WebGLUniformLocations[0], 0.31421000000000004); 63 | gl.drawArrays(4, 0, 3); 64 | yield; 65 | gl.uniform1f(WebGLUniformLocations[0], 0.33116); 66 | gl.drawArrays(4, 0, 3); 67 | yield; 68 | gl.uniform1f(WebGLUniformLocations[0], 0.348175); 69 | gl.drawArrays(4, 0, 3); 70 | yield; 71 | gl.uniform1f(WebGLUniformLocations[0], 0.36424); 72 | gl.drawArrays(4, 0, 3); 73 | yield; 74 | gl.uniform1f(WebGLUniformLocations[0], 0.38158000000000003); 75 | gl.drawArrays(4, 0, 3); 76 | yield; 77 | gl.uniform1f(WebGLUniformLocations[0], 0.397525); 78 | gl.drawArrays(4, 0, 3); 79 | yield; 80 | gl.uniform1f(WebGLUniformLocations[0], 0.41467000000000004); 81 | gl.drawArrays(4, 0, 3); 82 | yield; 83 | gl.uniform1f(WebGLUniformLocations[0], 0.43157500000000004); 84 | gl.drawArrays(4, 0, 3); 85 | yield; 86 | gl.uniform1f(WebGLUniformLocations[0], 0.447655); 87 | gl.drawArrays(4, 0, 3); 88 | yield; 89 | gl.uniform1f(WebGLUniformLocations[0], 0.465015); 90 | gl.drawArrays(4, 0, 3); 91 | yield; 92 | gl.uniform1f(WebGLUniformLocations[0], 0.48166500000000007); 93 | gl.drawArrays(4, 0, 3); 94 | yield; 95 | gl.uniform1f(WebGLUniformLocations[0], 0.49782000000000004); 96 | gl.drawArrays(4, 0, 3); 97 | yield; 98 | gl.uniform1f(WebGLUniformLocations[0], 0.51465); 99 | gl.drawArrays(4, 0, 3); 100 | yield; 101 | gl.uniform1f(WebGLUniformLocations[0], 0.531505); 102 | gl.drawArrays(4, 0, 3); 103 | yield; 104 | gl.uniform1f(WebGLUniformLocations[0], 0.54744); 105 | gl.drawArrays(4, 0, 3); 106 | yield; 107 | gl.uniform1f(WebGLUniformLocations[0], 0.5644600000000001); 108 | gl.drawArrays(4, 0, 3); 109 | yield; 110 | gl.uniform1f(WebGLUniformLocations[0], 0.581555); 111 | gl.drawArrays(4, 0, 3); 112 | yield; 113 | gl.uniform1f(WebGLUniformLocations[0], 0.59845); 114 | gl.drawArrays(4, 0, 3); 115 | yield; 116 | gl.uniform1f(WebGLUniformLocations[0], 0.61421); 117 | gl.drawArrays(4, 0, 3); 118 | yield; 119 | gl.uniform1f(WebGLUniformLocations[0], 0.6311300000000001); 120 | gl.drawArrays(4, 0, 3); 121 | yield; 122 | gl.uniform1f(WebGLUniformLocations[0], 0.6476200000000001); 123 | gl.drawArrays(4, 0, 3); 124 | yield; 125 | gl.uniform1f(WebGLUniformLocations[0], 0.664575); 126 | gl.drawArrays(4, 0, 3); 127 | yield; 128 | gl.uniform1f(WebGLUniformLocations[0], 0.68086); 129 | gl.drawArrays(4, 0, 3); 130 | yield; 131 | gl.uniform1f(WebGLUniformLocations[0], 0.697555); 132 | gl.drawArrays(4, 0, 3); 133 | yield; 134 | gl.uniform1f(WebGLUniformLocations[0], 0.7143600000000001); 135 | gl.drawArrays(4, 0, 3); 136 | yield; 137 | gl.uniform1f(WebGLUniformLocations[0], 0.73098); 138 | gl.drawArrays(4, 0, 3); 139 | yield; 140 | gl.uniform1f(WebGLUniformLocations[0], 0.74773); 141 | gl.drawArrays(4, 0, 3); 142 | yield; 143 | gl.uniform1f(WebGLUniformLocations[0], 0.76407); 144 | gl.drawArrays(4, 0, 3); 145 | yield; 146 | gl.uniform1f(WebGLUniformLocations[0], 0.78076); 147 | gl.drawArrays(4, 0, 3); 148 | yield; 149 | gl.uniform1f(WebGLUniformLocations[0], 0.79747); 150 | gl.drawArrays(4, 0, 3); 151 | yield; 152 | gl.uniform1f(WebGLUniformLocations[0], 0.8141100000000001); 153 | gl.drawArrays(4, 0, 3); 154 | yield; 155 | gl.uniform1f(WebGLUniformLocations[0], 0.83086); 156 | gl.drawArrays(4, 0, 3); 157 | yield; 158 | gl.uniform1f(WebGLUniformLocations[0], 0.8473950000000001); 159 | gl.drawArrays(4, 0, 3); 160 | yield; 161 | gl.uniform1f(WebGLUniformLocations[0], 0.8640100000000001); 162 | gl.drawArrays(4, 0, 3); 163 | yield; 164 | gl.uniform1f(WebGLUniformLocations[0], 0.8808250000000001); 165 | gl.drawArrays(4, 0, 3); 166 | yield; 167 | gl.uniform1f(WebGLUniformLocations[0], 0.89739); 168 | gl.drawArrays(4, 0, 3); 169 | yield; 170 | gl.uniform1f(WebGLUniformLocations[0], 0.9143150000000001); 171 | gl.drawArrays(4, 0, 3); 172 | yield; 173 | gl.uniform1f(WebGLUniformLocations[0], 0.9313100000000001); 174 | gl.drawArrays(4, 0, 3); 175 | yield; 176 | gl.uniform1f(WebGLUniformLocations[0], 0.9474800000000001); 177 | gl.drawArrays(4, 0, 3); 178 | yield; 179 | gl.uniform1f(WebGLUniformLocations[0], 0.9650650000000001); 180 | gl.drawArrays(4, 0, 3); 181 | yield; 182 | gl.uniform1f(WebGLUniformLocations[0], 0.9816900000000001); 183 | gl.drawArrays(4, 0, 3); 184 | yield; 185 | gl.uniform1f(WebGLUniformLocations[0], 0.9978750000000001); 186 | gl.drawArrays(4, 0, 3); 187 | yield; 188 | gl.uniform1f(WebGLUniformLocations[0], 1.015165); 189 | gl.drawArrays(4, 0, 3); 190 | yield; 191 | gl.uniform1f(WebGLUniformLocations[0], 1.0309650000000001); 192 | gl.drawArrays(4, 0, 3); 193 | yield; 194 | gl.uniform1f(WebGLUniformLocations[0], 1.0478100000000001); 195 | gl.drawArrays(4, 0, 3); 196 | yield; 197 | gl.uniform1f(WebGLUniformLocations[0], 1.065005); 198 | gl.drawArrays(4, 0, 3); 199 | yield; 200 | gl.uniform1f(WebGLUniformLocations[0], 1.08126); 201 | gl.drawArrays(4, 0, 3); 202 | yield; 203 | gl.uniform1f(WebGLUniformLocations[0], 1.0979050000000001); 204 | gl.drawArrays(4, 0, 3); 205 | yield; 206 | gl.uniform1f(WebGLUniformLocations[0], 1.115185); 207 | gl.drawArrays(4, 0, 3); 208 | yield; 209 | gl.uniform1f(WebGLUniformLocations[0], 1.1312300000000002); 210 | gl.drawArrays(4, 0, 3); 211 | yield; 212 | gl.uniform1f(WebGLUniformLocations[0], 1.1476950000000001); 213 | gl.drawArrays(4, 0, 3); 214 | yield; 215 | gl.uniform1f(WebGLUniformLocations[0], 1.1646050000000001); 216 | gl.drawArrays(4, 0, 3); 217 | yield; 218 | gl.uniform1f(WebGLUniformLocations[0], 1.181705); 219 | gl.drawArrays(4, 0, 3); 220 | yield; 221 | gl.uniform1f(WebGLUniformLocations[0], 1.197775); 222 | gl.drawArrays(4, 0, 3); 223 | yield; 224 | gl.uniform1f(WebGLUniformLocations[0], 1.214895); 225 | gl.drawArrays(4, 0, 3); 226 | yield; 227 | gl.uniform1f(WebGLUniformLocations[0], 1.23092); 228 | gl.drawArrays(4, 0, 3); 229 | yield; 230 | gl.uniform1f(WebGLUniformLocations[0], 1.247705); 231 | gl.drawArrays(4, 0, 3); 232 | yield; 233 | gl.uniform1f(WebGLUniformLocations[0], 1.265125); 234 | gl.drawArrays(4, 0, 3); 235 | yield; 236 | gl.uniform1f(WebGLUniformLocations[0], 1.2817150000000002); 237 | gl.drawArrays(4, 0, 3); 238 | yield; 239 | gl.uniform1f(WebGLUniformLocations[0], 1.29776); 240 | gl.drawArrays(4, 0, 3); 241 | yield; 242 | gl.uniform1f(WebGLUniformLocations[0], 1.3141200000000002); 243 | gl.drawArrays(4, 0, 3); 244 | yield; 245 | gl.uniform1f(WebGLUniformLocations[0], 1.33138); 246 | gl.drawArrays(4, 0, 3); 247 | yield; 248 | gl.uniform1f(WebGLUniformLocations[0], 1.3475700000000002); 249 | gl.drawArrays(4, 0, 3); 250 | yield; 251 | gl.uniform1f(WebGLUniformLocations[0], 1.364675); 252 | gl.drawArrays(4, 0, 3); 253 | yield; 254 | gl.uniform1f(WebGLUniformLocations[0], 1.38178); 255 | gl.drawArrays(4, 0, 3); 256 | yield; 257 | gl.uniform1f(WebGLUniformLocations[0], 1.39758); 258 | gl.drawArrays(4, 0, 3); 259 | yield; 260 | gl.uniform1f(WebGLUniformLocations[0], 1.4145500000000002); 261 | gl.drawArrays(4, 0, 3); 262 | yield; 263 | gl.uniform1f(WebGLUniformLocations[0], 1.4315300000000002); 264 | gl.drawArrays(4, 0, 3); 265 | yield; 266 | gl.uniform1f(WebGLUniformLocations[0], 1.4481700000000002); 267 | gl.drawArrays(4, 0, 3); 268 | yield; 269 | gl.uniform1f(WebGLUniformLocations[0], 1.464795); 270 | gl.drawArrays(4, 0, 3); 271 | yield; 272 | gl.uniform1f(WebGLUniformLocations[0], 1.48069); 273 | gl.drawArrays(4, 0, 3); 274 | yield; 275 | gl.uniform1f(WebGLUniformLocations[0], 1.4978600000000002); 276 | gl.drawArrays(4, 0, 3); 277 | yield; 278 | gl.uniform1f(WebGLUniformLocations[0], 1.5151750000000002); 279 | gl.drawArrays(4, 0, 3); 280 | yield; 281 | gl.uniform1f(WebGLUniformLocations[0], 1.5314500000000002); 282 | gl.drawArrays(4, 0, 3); 283 | yield; 284 | gl.uniform1f(WebGLUniformLocations[0], 1.5485200000000001); 285 | gl.drawArrays(4, 0, 3); 286 | yield; 287 | gl.uniform1f(WebGLUniformLocations[0], 1.56522); 288 | gl.drawArrays(4, 0, 3); 289 | yield; 290 | gl.uniform1f(WebGLUniformLocations[0], 1.5817700000000001); 291 | gl.drawArrays(4, 0, 3); 292 | yield; 293 | gl.uniform1f(WebGLUniformLocations[0], 1.59766); 294 | gl.drawArrays(4, 0, 3); 295 | yield; 296 | gl.uniform1f(WebGLUniformLocations[0], 1.6148950000000002); 297 | gl.drawArrays(4, 0, 3); 298 | yield; 299 | gl.uniform1f(WebGLUniformLocations[0], 1.6319450000000002); 300 | gl.drawArrays(4, 0, 3); 301 | yield; 302 | gl.uniform1f(WebGLUniformLocations[0], 1.6478800000000002); 303 | gl.drawArrays(4, 0, 3); 304 | yield; 305 | gl.uniform1f(WebGLUniformLocations[0], 1.66426); 306 | gl.drawArrays(4, 0, 3); 307 | yield; 308 | gl.uniform1f(WebGLUniformLocations[0], 1.681845); 309 | gl.drawArrays(4, 0, 3); 310 | yield; 311 | gl.uniform1f(WebGLUniformLocations[0], 1.6987); 312 | gl.drawArrays(4, 0, 3); 313 | yield; 314 | gl.uniform1f(WebGLUniformLocations[0], 1.7147150000000002); 315 | gl.drawArrays(4, 0, 3); 316 | yield; 317 | gl.uniform1f(WebGLUniformLocations[0], 1.7314550000000002); 318 | gl.drawArrays(4, 0, 3); 319 | yield; 320 | gl.uniform1f(WebGLUniformLocations[0], 1.7486050000000002); 321 | gl.drawArrays(4, 0, 3); 322 | yield; 323 | gl.uniform1f(WebGLUniformLocations[0], 1.764775); 324 | gl.drawArrays(4, 0, 3); 325 | yield; 326 | gl.uniform1f(WebGLUniformLocations[0], 1.7819650000000002); 327 | gl.drawArrays(4, 0, 3); 328 | yield; 329 | gl.uniform1f(WebGLUniformLocations[0], 1.7986050000000002); 330 | gl.drawArrays(4, 0, 3); 331 | yield; 332 | gl.uniform1f(WebGLUniformLocations[0], 1.8148600000000001); 333 | gl.drawArrays(4, 0, 3); 334 | yield; 335 | gl.uniform1f(WebGLUniformLocations[0], 1.83132); 336 | gl.drawArrays(4, 0, 3); 337 | yield; 338 | gl.uniform1f(WebGLUniformLocations[0], 1.8486600000000002); 339 | gl.drawArrays(4, 0, 3); 340 | yield; 341 | gl.uniform1f(WebGLUniformLocations[0], 1.8645950000000002); 342 | gl.drawArrays(4, 0, 3); 343 | yield; 344 | gl.uniform1f(WebGLUniformLocations[0], 1.88199); 345 | gl.drawArrays(4, 0, 3); 346 | yield; 347 | gl.uniform1f(WebGLUniformLocations[0], 1.8979300000000001); 348 | gl.drawArrays(4, 0, 3); 349 | yield; 350 | gl.uniform1f(WebGLUniformLocations[0], 1.9147250000000002); 351 | gl.drawArrays(4, 0, 3); 352 | yield; 353 | gl.uniform1f(WebGLUniformLocations[0], 1.931685); 354 | gl.drawArrays(4, 0, 3); 355 | yield; 356 | gl.uniform1f(WebGLUniformLocations[0], 1.9479250000000001); 357 | gl.drawArrays(4, 0, 3); 358 | yield; 359 | gl.uniform1f(WebGLUniformLocations[0], 1.9649100000000002); 360 | gl.drawArrays(4, 0, 3); 361 | yield; 362 | gl.uniform1f(WebGLUniformLocations[0], 1.9820300000000002); 363 | gl.drawArrays(4, 0, 3); 364 | yield; 365 | gl.uniform1f(WebGLUniformLocations[0], 1.9980750000000003); 366 | gl.drawArrays(4, 0, 3); 367 | yield; 368 | gl.uniform1f(WebGLUniformLocations[0], 2.0150200000000003); 369 | gl.drawArrays(4, 0, 3); 370 | yield; 371 | gl.uniform1f(WebGLUniformLocations[0], 2.031985); 372 | gl.drawArrays(4, 0, 3); 373 | yield; 374 | gl.uniform1f(WebGLUniformLocations[0], 2.0478650000000003); 375 | gl.drawArrays(4, 0, 3); 376 | yield; 377 | gl.uniform1f(WebGLUniformLocations[0], 2.06474); 378 | gl.drawArrays(4, 0, 3); 379 | yield; 380 | gl.uniform1f(WebGLUniformLocations[0], 2.08183); 381 | gl.drawArrays(4, 0, 3); 382 | yield; 383 | gl.uniform1f(WebGLUniformLocations[0], 2.098605); 384 | gl.drawArrays(4, 0, 3); 385 | yield; 386 | gl.uniform1f(WebGLUniformLocations[0], 2.11476); 387 | gl.drawArrays(4, 0, 3); 388 | yield; 389 | gl.uniform1f(WebGLUniformLocations[0], 2.131615); 390 | gl.drawArrays(4, 0, 3); 391 | yield; 392 | gl.uniform1f(WebGLUniformLocations[0], 2.1484900000000002); 393 | gl.drawArrays(4, 0, 3); 394 | yield; 395 | gl.uniform1f(WebGLUniformLocations[0], 2.1652050000000003); 396 | gl.drawArrays(4, 0, 3); 397 | yield; 398 | gl.uniform1f(WebGLUniformLocations[0], 2.1813550000000004); 399 | gl.drawArrays(4, 0, 3); 400 | yield; 401 | gl.uniform1f(WebGLUniformLocations[0], 2.19823); 402 | gl.drawArrays(4, 0, 3); 403 | yield; 404 | gl.uniform1f(WebGLUniformLocations[0], 2.214815); 405 | gl.drawArrays(4, 0, 3); 406 | yield; 407 | gl.uniform1f(WebGLUniformLocations[0], 2.2316900000000004); 408 | gl.drawArrays(4, 0, 3); 409 | yield; 410 | gl.uniform1f(WebGLUniformLocations[0], 2.2474800000000004); 411 | gl.drawArrays(4, 0, 3); 412 | yield; 413 | gl.uniform1f(WebGLUniformLocations[0], 2.2647850000000003); 414 | gl.drawArrays(4, 0, 3); 415 | yield; 416 | gl.uniform1f(WebGLUniformLocations[0], 2.281975); 417 | gl.drawArrays(4, 0, 3); 418 | yield; 419 | gl.uniform1f(WebGLUniformLocations[0], 2.2978400000000003); 420 | gl.drawArrays(4, 0, 3); 421 | yield; 422 | gl.uniform1f(WebGLUniformLocations[0], 2.31528); 423 | gl.drawArrays(4, 0, 3); 424 | yield; 425 | gl.uniform1f(WebGLUniformLocations[0], 2.3313); 426 | gl.drawArrays(4, 0, 3); 427 | yield; 428 | gl.uniform1f(WebGLUniformLocations[0], 2.3485500000000004); 429 | gl.drawArrays(4, 0, 3); 430 | yield; 431 | gl.uniform1f(WebGLUniformLocations[0], 2.364455); 432 | gl.drawArrays(4, 0, 3); 433 | yield; 434 | gl.uniform1f(WebGLUniformLocations[0], 2.38111); 435 | gl.drawArrays(4, 0, 3); 436 | yield; 437 | gl.uniform1f(WebGLUniformLocations[0], 2.398); 438 | gl.drawArrays(4, 0, 3); 439 | yield; 440 | gl.uniform1f(WebGLUniformLocations[0], 2.415125); 441 | gl.drawArrays(4, 0, 3); 442 | yield; 443 | gl.uniform1f(WebGLUniformLocations[0], 2.431975); 444 | gl.drawArrays(4, 0, 3); 445 | yield; 446 | gl.uniform1f(WebGLUniformLocations[0], 2.447935); 447 | gl.drawArrays(4, 0, 3); 448 | yield; 449 | gl.uniform1f(WebGLUniformLocations[0], 2.4647400000000004); 450 | gl.drawArrays(4, 0, 3); 451 | yield; 452 | gl.uniform1f(WebGLUniformLocations[0], 2.48157); 453 | gl.drawArrays(4, 0, 3); 454 | yield; 455 | gl.uniform1f(WebGLUniformLocations[0], 2.4984200000000003); 456 | gl.drawArrays(4, 0, 3); 457 | yield; 458 | gl.uniform1f(WebGLUniformLocations[0], 2.5148650000000004); 459 | gl.drawArrays(4, 0, 3); 460 | yield; 461 | gl.uniform1f(WebGLUniformLocations[0], 2.53189); 462 | gl.drawArrays(4, 0, 3); 463 | yield; 464 | gl.uniform1f(WebGLUniformLocations[0], 2.5482150000000003); 465 | gl.drawArrays(4, 0, 3); 466 | yield; 467 | gl.uniform1f(WebGLUniformLocations[0], 2.56509); 468 | gl.drawArrays(4, 0, 3); 469 | yield; 470 | gl.uniform1f(WebGLUniformLocations[0], 2.582135); 471 | gl.drawArrays(4, 0, 3); 472 | yield; 473 | gl.uniform1f(WebGLUniformLocations[0], 2.5980700000000003); 474 | gl.drawArrays(4, 0, 3); 475 | yield; 476 | gl.uniform1f(WebGLUniformLocations[0], 2.6151350000000004); 477 | gl.drawArrays(4, 0, 3); 478 | yield; 479 | gl.uniform1f(WebGLUniformLocations[0], 2.632015); 480 | gl.drawArrays(4, 0, 3); 481 | yield; 482 | gl.uniform1f(WebGLUniformLocations[0], 2.648165); 483 | gl.drawArrays(4, 0, 3); 484 | yield; 485 | gl.uniform1f(WebGLUniformLocations[0], 2.66522); 486 | gl.drawArrays(4, 0, 3); 487 | yield; 488 | gl.uniform1f(WebGLUniformLocations[0], 2.6816199999999997); 489 | gl.drawArrays(4, 0, 3); 490 | yield; 491 | gl.uniform1f(WebGLUniformLocations[0], 2.6984800000000004); 492 | gl.drawArrays(4, 0, 3); 493 | yield; 494 | gl.uniform1f(WebGLUniformLocations[0], 2.715155); 495 | gl.drawArrays(4, 0, 3); 496 | yield; 497 | gl.uniform1f(WebGLUniformLocations[0], 2.7319600000000004); 498 | gl.drawArrays(4, 0, 3); 499 | yield; 500 | gl.uniform1f(WebGLUniformLocations[0], 2.74786); 501 | gl.drawArrays(4, 0, 3); 502 | yield; 503 | gl.uniform1f(WebGLUniformLocations[0], 2.7645950000000004); 504 | gl.drawArrays(4, 0, 3); 505 | yield; 506 | gl.uniform1f(WebGLUniformLocations[0], 2.7813950000000003); 507 | gl.drawArrays(4, 0, 3); 508 | yield; 509 | gl.uniform1f(WebGLUniformLocations[0], 2.798385); 510 | gl.drawArrays(4, 0, 3); 511 | yield; 512 | gl.uniform1f(WebGLUniformLocations[0], 2.8149800000000003); 513 | gl.drawArrays(4, 0, 3); 514 | yield; 515 | gl.uniform1f(WebGLUniformLocations[0], 2.8317550000000002); 516 | gl.drawArrays(4, 0, 3); 517 | yield; 518 | gl.uniform1f(WebGLUniformLocations[0], 2.8478950000000003); 519 | gl.drawArrays(4, 0, 3); 520 | yield; 521 | gl.uniform1f(WebGLUniformLocations[0], 2.8652650000000004); 522 | gl.drawArrays(4, 0, 3); 523 | yield; 524 | gl.uniform1f(WebGLUniformLocations[0], 2.8813850000000003); 525 | gl.drawArrays(4, 0, 3); 526 | yield; 527 | gl.uniform1f(WebGLUniformLocations[0], 2.89827); 528 | gl.drawArrays(4, 0, 3); 529 | yield; 530 | gl.uniform1f(WebGLUniformLocations[0], 2.9151800000000003); 531 | gl.drawArrays(4, 0, 3); 532 | yield; 533 | gl.uniform1f(WebGLUniformLocations[0], 2.9320950000000003); 534 | gl.drawArrays(4, 0, 3); 535 | yield; 536 | gl.uniform1f(WebGLUniformLocations[0], 2.948525); 537 | gl.drawArrays(4, 0, 3); 538 | yield; 539 | gl.uniform1f(WebGLUniformLocations[0], 2.9649400000000004); 540 | gl.drawArrays(4, 0, 3); 541 | yield; 542 | gl.uniform1f(WebGLUniformLocations[0], 2.9812200000000004); 543 | gl.drawArrays(4, 0, 3); 544 | yield; 545 | gl.uniform1f(WebGLUniformLocations[0], 2.99846); 546 | gl.drawArrays(4, 0, 3); 547 | yield; 548 | gl.uniform1f(WebGLUniformLocations[0], 3.014565); 549 | gl.drawArrays(4, 0, 3); 550 | yield; 551 | gl.uniform1f(WebGLUniformLocations[0], 3.0315200000000004); 552 | gl.drawArrays(4, 0, 3); 553 | yield; 554 | gl.uniform1f(WebGLUniformLocations[0], 3.0480050000000003); 555 | gl.drawArrays(4, 0, 3); 556 | yield; 557 | gl.uniform1f(WebGLUniformLocations[0], 3.06461); 558 | gl.drawArrays(4, 0, 3); 559 | yield; 560 | gl.uniform1f(WebGLUniformLocations[0], 3.081385); 561 | gl.drawArrays(4, 0, 3); 562 | yield; 563 | gl.uniform1f(WebGLUniformLocations[0], 3.0987350000000005); 564 | gl.drawArrays(4, 0, 3); 565 | yield; 566 | gl.uniform1f(WebGLUniformLocations[0], 3.115235); 567 | gl.drawArrays(4, 0, 3); 568 | yield; 569 | gl.uniform1f(WebGLUniformLocations[0], 3.1315950000000004); 570 | gl.drawArrays(4, 0, 3); 571 | yield; 572 | gl.uniform1f(WebGLUniformLocations[0], 3.1486950000000005); 573 | gl.drawArrays(4, 0, 3); 574 | yield; 575 | gl.uniform1f(WebGLUniformLocations[0], 3.16529); 576 | gl.drawArrays(4, 0, 3); 577 | yield; 578 | gl.uniform1f(WebGLUniformLocations[0], 3.1814500000000003); 579 | gl.drawArrays(4, 0, 3); 580 | yield; 581 | gl.uniform1f(WebGLUniformLocations[0], 3.1979050000000004); 582 | gl.drawArrays(4, 0, 3); 583 | yield; 584 | gl.uniform1f(WebGLUniformLocations[0], 3.214535); 585 | gl.drawArrays(4, 0, 3); 586 | yield; 587 | gl.uniform1f(WebGLUniformLocations[0], 3.2317850000000004); 588 | gl.drawArrays(4, 0, 3); 589 | yield; 590 | gl.uniform1f(WebGLUniformLocations[0], 3.2478000000000002); 591 | gl.drawArrays(4, 0, 3); 592 | yield; 593 | gl.uniform1f(WebGLUniformLocations[0], 3.264635); 594 | gl.drawArrays(4, 0, 3); 595 | yield; 596 | gl.uniform1f(WebGLUniformLocations[0], 3.2814500000000004); 597 | gl.drawArrays(4, 0, 3); 598 | yield; 599 | gl.uniform1f(WebGLUniformLocations[0], 3.2986500000000003); 600 | gl.drawArrays(4, 0, 3); 601 | yield; 602 | gl.uniform1f(WebGLUniformLocations[0], 3.31551); 603 | gl.drawArrays(4, 0, 3); 604 | yield; 605 | gl.uniform1f(WebGLUniformLocations[0], 3.3313750000000004); 606 | gl.drawArrays(4, 0, 3); 607 | yield; 608 | gl.uniform1f(WebGLUniformLocations[0], 3.3478200000000005); 609 | gl.drawArrays(4, 0, 3); 610 | yield; 611 | gl.uniform1f(WebGLUniformLocations[0], 3.36491); 612 | gl.drawArrays(4, 0, 3); 613 | yield; 614 | gl.uniform1f(WebGLUniformLocations[0], 3.382025); 615 | gl.drawArrays(4, 0, 3); 616 | yield; 617 | gl.uniform1f(WebGLUniformLocations[0], 3.39799); 618 | gl.drawArrays(4, 0, 3); 619 | yield; 620 | gl.uniform1f(WebGLUniformLocations[0], 3.4155750000000005); 621 | gl.drawArrays(4, 0, 3); 622 | yield; 623 | gl.uniform1f(WebGLUniformLocations[0], 3.4317400000000005); 624 | gl.drawArrays(4, 0, 3); 625 | yield; 626 | gl.uniform1f(WebGLUniformLocations[0], 3.4487950000000005); 627 | gl.drawArrays(4, 0, 3); 628 | yield; 629 | gl.uniform1f(WebGLUniformLocations[0], 3.465155); 630 | gl.drawArrays(4, 0, 3); 631 | yield; 632 | gl.uniform1f(WebGLUniformLocations[0], 3.4821850000000003); 633 | gl.drawArrays(4, 0, 3); 634 | yield; 635 | gl.uniform1f(WebGLUniformLocations[0], 3.4987200000000005); 636 | gl.drawArrays(4, 0, 3); 637 | yield; 638 | gl.uniform1f(WebGLUniformLocations[0], 3.5153350000000003); 639 | gl.drawArrays(4, 0, 3); 640 | yield; 641 | gl.uniform1f(WebGLUniformLocations[0], 3.531655); 642 | gl.drawArrays(4, 0, 3); 643 | yield; 644 | gl.uniform1f(WebGLUniformLocations[0], 3.5479900000000004); 645 | gl.drawArrays(4, 0, 3); 646 | yield; 647 | gl.uniform1f(WebGLUniformLocations[0], 3.5651); 648 | gl.drawArrays(4, 0, 3); 649 | yield; 650 | gl.uniform1f(WebGLUniformLocations[0], 3.5822550000000004); 651 | gl.drawArrays(4, 0, 3); 652 | yield; 653 | gl.uniform1f(WebGLUniformLocations[0], 3.5985400000000003); 654 | gl.drawArrays(4, 0, 3); 655 | yield; 656 | gl.uniform1f(WebGLUniformLocations[0], 3.61478); 657 | gl.drawArrays(4, 0, 3); 658 | yield; 659 | gl.uniform1f(WebGLUniformLocations[0], 3.6318900000000003); 660 | gl.drawArrays(4, 0, 3); 661 | yield; 662 | gl.uniform1f(WebGLUniformLocations[0], 3.6488950000000004); 663 | gl.drawArrays(4, 0, 3); 664 | yield; 665 | gl.uniform1f(WebGLUniformLocations[0], 3.665315); 666 | gl.drawArrays(4, 0, 3); 667 | yield; 668 | gl.uniform1f(WebGLUniformLocations[0], 3.6816649999999997); 669 | gl.drawArrays(4, 0, 3); 670 | yield; 671 | gl.uniform1f(WebGLUniformLocations[0], 3.69865); 672 | gl.drawArrays(4, 0, 3); 673 | yield; 674 | gl.uniform1f(WebGLUniformLocations[0], 3.71484); 675 | gl.drawArrays(4, 0, 3); 676 | yield; 677 | gl.uniform1f(WebGLUniformLocations[0], 3.7320150000000005); 678 | gl.drawArrays(4, 0, 3); 679 | yield; 680 | gl.uniform1f(WebGLUniformLocations[0], 3.7480750000000005); 681 | gl.drawArrays(4, 0, 3); 682 | yield; 683 | gl.uniform1f(WebGLUniformLocations[0], 3.764355); 684 | gl.drawArrays(4, 0, 3); 685 | yield; 686 | gl.uniform1f(WebGLUniformLocations[0], 3.7812300000000003); 687 | gl.drawArrays(4, 0, 3); 688 | yield; 689 | gl.uniform1f(WebGLUniformLocations[0], 3.7981650000000005); 690 | gl.drawArrays(4, 0, 3); 691 | yield; 692 | gl.uniform1f(WebGLUniformLocations[0], 3.8146850000000003); 693 | gl.drawArrays(4, 0, 3); 694 | yield; 695 | gl.uniform1f(WebGLUniformLocations[0], 3.832085); 696 | gl.drawArrays(4, 0, 3); 697 | yield; 698 | gl.uniform1f(WebGLUniformLocations[0], 3.8488100000000003); 699 | gl.drawArrays(4, 0, 3); 700 | yield; 701 | gl.uniform1f(WebGLUniformLocations[0], 3.8652650000000004); 702 | gl.drawArrays(4, 0, 3); 703 | yield; 704 | gl.uniform1f(WebGLUniformLocations[0], 3.881625); 705 | gl.drawArrays(4, 0, 3); 706 | yield; 707 | gl.uniform1f(WebGLUniformLocations[0], 3.89808); 708 | gl.drawArrays(4, 0, 3); 709 | yield; 710 | gl.uniform1f(WebGLUniformLocations[0], 3.9152150000000003); 711 | gl.drawArrays(4, 0, 3); 712 | yield; 713 | gl.uniform1f(WebGLUniformLocations[0], 3.93217); 714 | gl.drawArrays(4, 0, 3); 715 | yield; 716 | gl.uniform1f(WebGLUniformLocations[0], 3.94877); 717 | gl.drawArrays(4, 0, 3); 718 | yield; 719 | gl.uniform1f(WebGLUniformLocations[0], 3.9656450000000003); 720 | gl.drawArrays(4, 0, 3); 721 | yield; 722 | gl.uniform1f(WebGLUniformLocations[0], 3.9819750000000003); 723 | gl.drawArrays(4, 0, 3); 724 | yield; 725 | gl.uniform1f(WebGLUniformLocations[0], 3.998565); 726 | gl.drawArrays(4, 0, 3); 727 | yield; 728 | gl.uniform1f(WebGLUniformLocations[0], 4.014600000000001); 729 | gl.drawArrays(4, 0, 3); 730 | yield; 731 | gl.uniform1f(WebGLUniformLocations[0], 4.03193); 732 | gl.drawArrays(4, 0, 3); 733 | yield; 734 | gl.uniform1f(WebGLUniformLocations[0], 4.048115); 735 | gl.drawArrays(4, 0, 3); 736 | yield; 737 | gl.uniform1f(WebGLUniformLocations[0], 4.0649750000000004); 738 | gl.drawArrays(4, 0, 3); 739 | yield; 740 | gl.uniform1f(WebGLUniformLocations[0], 4.08141); 741 | gl.drawArrays(4, 0, 3); 742 | yield; 743 | gl.uniform1f(WebGLUniformLocations[0], 4.098590000000001); 744 | gl.drawArrays(4, 0, 3); 745 | yield; 746 | gl.uniform1f(WebGLUniformLocations[0], 4.115185); 747 | gl.drawArrays(4, 0, 3); 748 | yield; 749 | gl.uniform1f(WebGLUniformLocations[0], 4.131655); 750 | gl.drawArrays(4, 0, 3); 751 | yield; 752 | gl.uniform1f(WebGLUniformLocations[0], 4.1483550000000005); 753 | gl.drawArrays(4, 0, 3); 754 | yield; 755 | gl.uniform1f(WebGLUniformLocations[0], 4.164785); 756 | gl.drawArrays(4, 0, 3); 757 | yield; 758 | gl.uniform1f(WebGLUniformLocations[0], 4.18172); 759 | gl.drawArrays(4, 0, 3); 760 | yield; 761 | gl.uniform1f(WebGLUniformLocations[0], 4.19847); 762 | gl.drawArrays(4, 0, 3); 763 | yield; 764 | gl.uniform1f(WebGLUniformLocations[0], 4.2146300000000005); 765 | gl.drawArrays(4, 0, 3); 766 | yield; 767 | gl.uniform1f(WebGLUniformLocations[0], 4.231705000000001); 768 | gl.drawArrays(4, 0, 3); 769 | yield; 770 | gl.uniform1f(WebGLUniformLocations[0], 4.24789); 771 | gl.drawArrays(4, 0, 3); 772 | yield; 773 | gl.uniform1f(WebGLUniformLocations[0], 4.2645); 774 | gl.drawArrays(4, 0, 3); 775 | yield; 776 | gl.uniform1f(WebGLUniformLocations[0], 4.2812600000000005); 777 | gl.drawArrays(4, 0, 3); 778 | yield; 779 | gl.uniform1f(WebGLUniformLocations[0], 4.298055000000001); 780 | gl.drawArrays(4, 0, 3); 781 | yield; 782 | gl.uniform1f(WebGLUniformLocations[0], 4.3153250000000005); 783 | gl.drawArrays(4, 0, 3); 784 | yield; 785 | gl.uniform1f(WebGLUniformLocations[0], 4.33161); 786 | gl.drawArrays(4, 0, 3); 787 | yield; 788 | gl.uniform1f(WebGLUniformLocations[0], 4.34867); 789 | gl.drawArrays(4, 0, 3); 790 | yield; 791 | gl.uniform1f(WebGLUniformLocations[0], 4.365645000000001); 792 | gl.drawArrays(4, 0, 3); 793 | yield; 794 | gl.uniform1f(WebGLUniformLocations[0], 4.381845); 795 | gl.drawArrays(4, 0, 3); 796 | yield; 797 | gl.uniform1f(WebGLUniformLocations[0], 4.3988700000000005); 798 | gl.drawArrays(4, 0, 3); 799 | yield; 800 | gl.uniform1f(WebGLUniformLocations[0], 4.415055000000001); 801 | gl.drawArrays(4, 0, 3); 802 | yield; 803 | gl.uniform1f(WebGLUniformLocations[0], 4.431495); 804 | gl.drawArrays(4, 0, 3); 805 | yield; 806 | gl.uniform1f(WebGLUniformLocations[0], 4.4486550000000005); 807 | gl.drawArrays(4, 0, 3); 808 | yield; 809 | gl.uniform1f(WebGLUniformLocations[0], 4.46563); 810 | gl.drawArrays(4, 0, 3); 811 | yield; 812 | gl.uniform1f(WebGLUniformLocations[0], 4.481635000000001); 813 | gl.drawArrays(4, 0, 3); 814 | yield; 815 | gl.uniform1f(WebGLUniformLocations[0], 4.49857); 816 | gl.drawArrays(4, 0, 3); 817 | yield; 818 | gl.uniform1f(WebGLUniformLocations[0], 4.515725000000001); 819 | gl.drawArrays(4, 0, 3); 820 | yield; 821 | gl.uniform1f(WebGLUniformLocations[0], 4.531545); 822 | gl.drawArrays(4, 0, 3); 823 | yield; 824 | gl.uniform1f(WebGLUniformLocations[0], 4.5480350000000005); 825 | gl.drawArrays(4, 0, 3); 826 | yield; 827 | gl.uniform1f(WebGLUniformLocations[0], 4.56522); 828 | gl.drawArrays(4, 0, 3); 829 | yield; 830 | gl.uniform1f(WebGLUniformLocations[0], 4.582230000000001); 831 | gl.drawArrays(4, 0, 3); 832 | yield; 833 | gl.uniform1f(WebGLUniformLocations[0], 4.599025); 834 | gl.drawArrays(4, 0, 3); 835 | yield; 836 | gl.uniform1f(WebGLUniformLocations[0], 4.615635); 837 | gl.drawArrays(4, 0, 3); 838 | yield; 839 | gl.uniform1f(WebGLUniformLocations[0], 4.631685); 840 | gl.drawArrays(4, 0, 3); 841 | yield; 842 | gl.uniform1f(WebGLUniformLocations[0], 4.648825); 843 | gl.drawArrays(4, 0, 3); 844 | yield; 845 | gl.uniform1f(WebGLUniformLocations[0], 4.665100000000001); 846 | gl.drawArrays(4, 0, 3); 847 | yield; 848 | gl.uniform1f(WebGLUniformLocations[0], 4.6824); 849 | gl.drawArrays(4, 0, 3); 850 | yield; 851 | gl.uniform1f(WebGLUniformLocations[0], 4.6984900000000005); 852 | gl.drawArrays(4, 0, 3); 853 | yield; 854 | gl.uniform1f(WebGLUniformLocations[0], 4.71536); 855 | gl.drawArrays(4, 0, 3); 856 | yield; 857 | gl.uniform1f(WebGLUniformLocations[0], 4.73238); 858 | gl.drawArrays(4, 0, 3); 859 | yield; 860 | gl.uniform1f(WebGLUniformLocations[0], 4.748355); 861 | gl.drawArrays(4, 0, 3); 862 | yield; 863 | gl.uniform1f(WebGLUniformLocations[0], 4.765215); 864 | gl.drawArrays(4, 0, 3); 865 | yield; 866 | gl.uniform1f(WebGLUniformLocations[0], 4.781630000000001); 867 | gl.drawArrays(4, 0, 3); 868 | yield; 869 | gl.uniform1f(WebGLUniformLocations[0], 4.7990200000000005); 870 | gl.drawArrays(4, 0, 3); 871 | yield; 872 | gl.uniform1f(WebGLUniformLocations[0], 4.8147); 873 | gl.drawArrays(4, 0, 3); 874 | yield; 875 | gl.uniform1f(WebGLUniformLocations[0], 4.83176); 876 | gl.drawArrays(4, 0, 3); 877 | yield; 878 | gl.uniform1f(WebGLUniformLocations[0], 4.8480300000000005); 879 | gl.drawArrays(4, 0, 3); 880 | yield; 881 | gl.uniform1f(WebGLUniformLocations[0], 4.864675); 882 | gl.drawArrays(4, 0, 3); 883 | yield; 884 | gl.uniform1f(WebGLUniformLocations[0], 4.88224); 885 | gl.drawArrays(4, 0, 3); 886 | yield; 887 | gl.uniform1f(WebGLUniformLocations[0], 4.8988000000000005); 888 | gl.drawArrays(4, 0, 3); 889 | yield; 890 | gl.uniform1f(WebGLUniformLocations[0], 4.915765); 891 | gl.drawArrays(4, 0, 3); 892 | yield; 893 | gl.uniform1f(WebGLUniformLocations[0], 4.9318550000000005); 894 | gl.drawArrays(4, 0, 3); 895 | yield; 896 | gl.uniform1f(WebGLUniformLocations[0], 4.948265); 897 | gl.drawArrays(4, 0, 3); 898 | yield; 899 | gl.uniform1f(WebGLUniformLocations[0], 4.9648); 900 | gl.drawArrays(4, 0, 3); 901 | yield; 902 | gl.uniform1f(WebGLUniformLocations[0], 4.98148); 903 | gl.drawArrays(4, 0, 3); 904 | yield; 905 | gl.uniform1f(WebGLUniformLocations[0], 4.998525000000001); 906 | gl.drawArrays(4, 0, 3); 907 | yield; 908 | gl.uniform1f(WebGLUniformLocations[0], 5.015365); 909 | gl.drawArrays(4, 0, 3); 910 | yield; 911 | gl.uniform1f(WebGLUniformLocations[0], 5.0314000000000005); 912 | gl.drawArrays(4, 0, 3); 913 | yield; 914 | gl.uniform1f(WebGLUniformLocations[0], 5.04816); 915 | gl.drawArrays(4, 0, 3); 916 | yield; 917 | gl.uniform1f(WebGLUniformLocations[0], 5.065215); 918 | gl.drawArrays(4, 0, 3); 919 | yield; 920 | gl.uniform1f(WebGLUniformLocations[0], 5.081899999999999); 921 | gl.drawArrays(4, 0, 3); 922 | yield; 923 | gl.uniform1f(WebGLUniformLocations[0], 5.098965000000001); 924 | gl.drawArrays(4, 0, 3); 925 | yield; 926 | gl.uniform1f(WebGLUniformLocations[0], 5.115295000000001); 927 | gl.drawArrays(4, 0, 3); 928 | yield; 929 | gl.uniform1f(WebGLUniformLocations[0], 5.132230000000001); 930 | gl.drawArrays(4, 0, 3); 931 | yield; 932 | gl.uniform1f(WebGLUniformLocations[0], 5.148245); 933 | gl.drawArrays(4, 0, 3); 934 | yield; 935 | gl.uniform1f(WebGLUniformLocations[0], 5.164665); 936 | gl.drawArrays(4, 0, 3); 937 | yield; 938 | gl.uniform1f(WebGLUniformLocations[0], 5.182035000000001); 939 | gl.drawArrays(4, 0, 3); 940 | yield; 941 | gl.uniform1f(WebGLUniformLocations[0], 5.198230000000001); 942 | gl.drawArrays(4, 0, 3); 943 | yield; 944 | gl.uniform1f(WebGLUniformLocations[0], 5.215450000000001); 945 | gl.drawArrays(4, 0, 3); 946 | yield; 947 | gl.uniform1f(WebGLUniformLocations[0], 5.2324150000000005); 948 | gl.drawArrays(4, 0, 3); 949 | yield; 950 | gl.uniform1f(WebGLUniformLocations[0], 5.24849); 951 | gl.drawArrays(4, 0, 3); 952 | yield; 953 | gl.uniform1f(WebGLUniformLocations[0], 5.265110000000001); 954 | gl.drawArrays(4, 0, 3); 955 | yield; 956 | gl.uniform1f(WebGLUniformLocations[0], 5.282485); 957 | gl.drawArrays(4, 0, 3); 958 | yield; 959 | gl.uniform1f(WebGLUniformLocations[0], 5.2986200000000006); 960 | gl.drawArrays(4, 0, 3); 961 | yield; 962 | gl.uniform1f(WebGLUniformLocations[0], 5.315650000000001); 963 | gl.drawArrays(4, 0, 3); 964 | yield; 965 | gl.uniform1f(WebGLUniformLocations[0], 5.331720000000001); 966 | gl.drawArrays(4, 0, 3); 967 | yield; 968 | gl.uniform1f(WebGLUniformLocations[0], 5.3487100000000005); 969 | gl.drawArrays(4, 0, 3); 970 | yield; 971 | gl.uniform1f(WebGLUniformLocations[0], 5.365315000000001); 972 | gl.drawArrays(4, 0, 3); 973 | yield; 974 | gl.uniform1f(WebGLUniformLocations[0], 5.381895); 975 | gl.drawArrays(4, 0, 3); 976 | yield; 977 | gl.uniform1f(WebGLUniformLocations[0], 5.3986600000000005); 978 | gl.drawArrays(4, 0, 3); 979 | yield; 980 | gl.uniform1f(WebGLUniformLocations[0], 5.415735000000001); 981 | gl.drawArrays(4, 0, 3); 982 | yield; 983 | gl.uniform1f(WebGLUniformLocations[0], 5.431935); 984 | gl.drawArrays(4, 0, 3); 985 | yield; 986 | gl.uniform1f(WebGLUniformLocations[0], 5.448225000000001); 987 | gl.drawArrays(4, 0, 3); 988 | yield; 989 | gl.uniform1f(WebGLUniformLocations[0], 5.4656); 990 | gl.drawArrays(4, 0, 3); 991 | yield; 992 | gl.uniform1f(WebGLUniformLocations[0], 5.4816400000000005); 993 | gl.drawArrays(4, 0, 3); 994 | yield; 995 | gl.uniform1f(WebGLUniformLocations[0], 5.498950000000001); 996 | gl.drawArrays(4, 0, 3); 997 | yield; 998 | gl.uniform1f(WebGLUniformLocations[0], 5.515665); 999 | gl.drawArrays(4, 0, 3); 1000 | yield; 1001 | gl.uniform1f(WebGLUniformLocations[0], 5.53146); 1002 | gl.drawArrays(4, 0, 3); 1003 | yield; 1004 | gl.uniform1f(WebGLUniformLocations[0], 5.549235); 1005 | gl.drawArrays(4, 0, 3); 1006 | yield; 1007 | gl.uniform1f(WebGLUniformLocations[0], 5.564625); 1008 | gl.drawArrays(4, 0, 3); 1009 | yield; 1010 | gl.uniform1f(WebGLUniformLocations[0], 5.581955000000001); 1011 | gl.drawArrays(4, 0, 3); 1012 | yield; 1013 | gl.uniform1f(WebGLUniformLocations[0], 5.598295); 1014 | gl.drawArrays(4, 0, 3); 1015 | yield; 1016 | gl.uniform1f(WebGLUniformLocations[0], 5.615710000000001); 1017 | gl.drawArrays(4, 0, 3); 1018 | yield; 1019 | gl.uniform1f(WebGLUniformLocations[0], 5.63243); 1020 | gl.drawArrays(4, 0, 3); 1021 | yield; 1022 | gl.uniform1f(WebGLUniformLocations[0], 5.648345000000001); 1023 | gl.drawArrays(4, 0, 3); 1024 | yield; 1025 | gl.uniform1f(WebGLUniformLocations[0], 5.665830000000001); 1026 | gl.drawArrays(4, 0, 3); 1027 | yield; 1028 | gl.uniform1f(WebGLUniformLocations[0], 5.682075); 1029 | gl.drawArrays(4, 0, 3); 1030 | yield; 1031 | gl.uniform1f(WebGLUniformLocations[0], 5.6983950000000005); 1032 | gl.drawArrays(4, 0, 3); 1033 | yield; 1034 | gl.uniform1f(WebGLUniformLocations[0], 5.715605); 1035 | gl.drawArrays(4, 0, 3); 1036 | yield; 1037 | gl.uniform1f(WebGLUniformLocations[0], 5.731645); 1038 | gl.drawArrays(4, 0, 3); 1039 | yield; 1040 | gl.uniform1f(WebGLUniformLocations[0], 5.748810000000001); 1041 | gl.drawArrays(4, 0, 3); 1042 | yield; 1043 | gl.uniform1f(WebGLUniformLocations[0], 5.7659400000000005); 1044 | gl.drawArrays(4, 0, 3); 1045 | yield; 1046 | gl.uniform1f(WebGLUniformLocations[0], 5.78204); 1047 | gl.drawArrays(4, 0, 3); 1048 | yield; 1049 | gl.uniform1f(WebGLUniformLocations[0], 5.798415); 1050 | gl.drawArrays(4, 0, 3); 1051 | yield; 1052 | gl.uniform1f(WebGLUniformLocations[0], 5.815955000000001); 1053 | gl.drawArrays(4, 0, 3); 1054 | yield; 1055 | gl.uniform1f(WebGLUniformLocations[0], 5.83246); 1056 | gl.drawArrays(4, 0, 3); 1057 | yield; 1058 | gl.uniform1f(WebGLUniformLocations[0], 5.849325); 1059 | gl.drawArrays(4, 0, 3); 1060 | yield; 1061 | gl.uniform1f(WebGLUniformLocations[0], 5.865355); 1062 | gl.drawArrays(4, 0, 3); 1063 | yield; 1064 | gl.uniform1f(WebGLUniformLocations[0], 5.882505); 1065 | gl.drawArrays(4, 0, 3); 1066 | yield; 1067 | gl.uniform1f(WebGLUniformLocations[0], 5.89848); 1068 | gl.drawArrays(4, 0, 3); 1069 | yield; 1070 | gl.uniform1f(WebGLUniformLocations[0], 5.915990000000001); 1071 | gl.drawArrays(4, 0, 3); 1072 | yield; 1073 | gl.uniform1f(WebGLUniformLocations[0], 5.93266); 1074 | gl.drawArrays(4, 0, 3); 1075 | yield; 1076 | gl.uniform1f(WebGLUniformLocations[0], 5.948785000000001); 1077 | gl.drawArrays(4, 0, 3); 1078 | yield; 1079 | gl.uniform1f(WebGLUniformLocations[0], 5.96517); 1080 | gl.drawArrays(4, 0, 3); 1081 | yield; 1082 | gl.uniform1f(WebGLUniformLocations[0], 5.982105000000001); 1083 | gl.drawArrays(4, 0, 3); 1084 | yield; 1085 | gl.uniform1f(WebGLUniformLocations[0], 5.998515); 1086 | gl.drawArrays(4, 0, 3); 1087 | yield; 1088 | gl.uniform1f(WebGLUniformLocations[0], 6.0157050000000005); 1089 | gl.drawArrays(4, 0, 3); 1090 | yield; 1091 | gl.uniform1f(WebGLUniformLocations[0], 6.03237); 1092 | gl.drawArrays(4, 0, 3); 1093 | yield; 1094 | gl.uniform1f(WebGLUniformLocations[0], 6.048965000000001); 1095 | gl.drawArrays(4, 0, 3); 1096 | yield; 1097 | gl.uniform1f(WebGLUniformLocations[0], 6.06575); 1098 | gl.drawArrays(4, 0, 3); 1099 | yield; 1100 | gl.uniform1f(WebGLUniformLocations[0], 6.081899999999999); 1101 | gl.drawArrays(4, 0, 3); 1102 | yield; 1103 | gl.uniform1f(WebGLUniformLocations[0], 6.09893); 1104 | gl.drawArrays(4, 0, 3); 1105 | yield; 1106 | gl.uniform1f(WebGLUniformLocations[0], 6.115235); 1107 | gl.drawArrays(4, 0, 3); 1108 | yield; 1109 | gl.uniform1f(WebGLUniformLocations[0], 6.13229); 1110 | gl.drawArrays(4, 0, 3); 1111 | yield; 1112 | gl.uniform1f(WebGLUniformLocations[0], 6.149125000000001); 1113 | gl.drawArrays(4, 0, 3); 1114 | yield; 1115 | gl.uniform1f(WebGLUniformLocations[0], 6.1654100000000005); 1116 | gl.drawArrays(4, 0, 3); 1117 | yield; 1118 | gl.uniform1f(WebGLUniformLocations[0], 6.182535000000001); 1119 | gl.drawArrays(4, 0, 3); 1120 | yield; 1121 | gl.uniform1f(WebGLUniformLocations[0], 6.1985); 1122 | gl.drawArrays(4, 0, 3); 1123 | yield; 1124 | gl.uniform1f(WebGLUniformLocations[0], 6.215465000000001); 1125 | gl.drawArrays(4, 0, 3); 1126 | yield; 1127 | gl.uniform1f(WebGLUniformLocations[0], 6.232360000000001); 1128 | gl.drawArrays(4, 0, 3); 1129 | yield; 1130 | gl.uniform1f(WebGLUniformLocations[0], 6.248725); 1131 | gl.drawArrays(4, 0, 3); 1132 | yield; 1133 | gl.uniform1f(WebGLUniformLocations[0], 6.265225000000001); 1134 | gl.drawArrays(4, 0, 3); 1135 | yield; 1136 | gl.uniform1f(WebGLUniformLocations[0], 6.282265000000001); 1137 | gl.drawArrays(4, 0, 3); 1138 | yield; 1139 | gl.uniform1f(WebGLUniformLocations[0], 6.29858); 1140 | gl.drawArrays(4, 0, 3); 1141 | yield; 1142 | gl.uniform1f(WebGLUniformLocations[0], 6.31512); 1143 | gl.drawArrays(4, 0, 3); 1144 | yield; 1145 | gl.uniform1f(WebGLUniformLocations[0], 6.332370000000001); 1146 | gl.drawArrays(4, 0, 3); 1147 | yield; 1148 | gl.uniform1f(WebGLUniformLocations[0], 6.34951); 1149 | gl.drawArrays(4, 0, 3); 1150 | yield; 1151 | gl.uniform1f(WebGLUniformLocations[0], 6.365410000000001); 1152 | gl.drawArrays(4, 0, 3); 1153 | yield; 1154 | gl.uniform1f(WebGLUniformLocations[0], 6.382365000000001); 1155 | gl.drawArrays(4, 0, 3); 1156 | yield; 1157 | gl.uniform1f(WebGLUniformLocations[0], 6.3984250000000005); 1158 | gl.drawArrays(4, 0, 3); 1159 | yield; 1160 | gl.uniform1f(WebGLUniformLocations[0], 6.415710000000001); 1161 | gl.drawArrays(4, 0, 3); 1162 | yield; 1163 | gl.uniform1f(WebGLUniformLocations[0], 6.432415000000001); 1164 | gl.drawArrays(4, 0, 3); 1165 | yield; 1166 | gl.uniform1f(WebGLUniformLocations[0], 6.448645000000001); 1167 | gl.drawArrays(4, 0, 3); 1168 | yield; 1169 | gl.uniform1f(WebGLUniformLocations[0], 6.4656); 1170 | gl.drawArrays(4, 0, 3); 1171 | yield; 1172 | gl.uniform1f(WebGLUniformLocations[0], 6.48251); 1173 | gl.drawArrays(4, 0, 3); 1174 | yield; 1175 | gl.uniform1f(WebGLUniformLocations[0], 6.499065000000001); 1176 | gl.drawArrays(4, 0, 3); 1177 | yield; 1178 | gl.uniform1f(WebGLUniformLocations[0], 6.516335000000001); 1179 | gl.drawArrays(4, 0, 3); 1180 | yield; 1181 | gl.uniform1f(WebGLUniformLocations[0], 6.53237); 1182 | gl.drawArrays(4, 0, 3); 1183 | yield; 1184 | gl.uniform1f(WebGLUniformLocations[0], 6.54886); 1185 | gl.drawArrays(4, 0, 3); 1186 | yield; 1187 | gl.uniform1f(WebGLUniformLocations[0], 6.566175); 1188 | gl.drawArrays(4, 0, 3); 1189 | yield; 1190 | gl.uniform1f(WebGLUniformLocations[0], 6.581950000000001); 1191 | gl.drawArrays(4, 0, 3); 1192 | yield; 1193 | gl.uniform1f(WebGLUniformLocations[0], 6.599135); 1194 | gl.drawArrays(4, 0, 3); 1195 | yield; 1196 | gl.uniform1f(WebGLUniformLocations[0], 6.61528); 1197 | gl.drawArrays(4, 0, 3); 1198 | yield; 1199 | gl.uniform1f(WebGLUniformLocations[0], 6.632215); 1200 | gl.drawArrays(4, 0, 3); 1201 | yield; 1202 | gl.uniform1f(WebGLUniformLocations[0], 6.649190000000001); 1203 | gl.drawArrays(4, 0, 3); 1204 | yield; 1205 | gl.uniform1f(WebGLUniformLocations[0], 6.666015000000001); 1206 | gl.drawArrays(4, 0, 3); 1207 | yield; 1208 | gl.uniform1f(WebGLUniformLocations[0], 6.681940000000001); 1209 | gl.drawArrays(4, 0, 3); 1210 | yield; 1211 | gl.uniform1f(WebGLUniformLocations[0], 6.698805); 1212 | gl.drawArrays(4, 0, 3); 1213 | yield; 1214 | gl.uniform1f(WebGLUniformLocations[0], 6.715855); 1215 | gl.drawArrays(4, 0, 3); 1216 | yield; 1217 | gl.uniform1f(WebGLUniformLocations[0], 6.732310000000001); 1218 | gl.drawArrays(4, 0, 3); 1219 | yield; 1220 | gl.uniform1f(WebGLUniformLocations[0], 6.749490000000001); 1221 | gl.drawArrays(4, 0, 3); 1222 | yield; 1223 | gl.uniform1f(WebGLUniformLocations[0], 6.765505000000001); 1224 | gl.drawArrays(4, 0, 3); 1225 | yield; 1226 | gl.uniform1f(WebGLUniformLocations[0], 6.782395); 1227 | gl.drawArrays(4, 0, 3); 1228 | yield; 1229 | gl.uniform1f(WebGLUniformLocations[0], 6.799360000000001); 1230 | gl.drawArrays(4, 0, 3); 1231 | yield; 1232 | gl.uniform1f(WebGLUniformLocations[0], 6.81564); 1233 | gl.drawArrays(4, 0, 3); 1234 | yield; 1235 | gl.uniform1f(WebGLUniformLocations[0], 6.832750000000001); 1236 | gl.drawArrays(4, 0, 3); 1237 | yield; 1238 | gl.uniform1f(WebGLUniformLocations[0], 6.849095); 1239 | gl.drawArrays(4, 0, 3); 1240 | yield; 1241 | gl.uniform1f(WebGLUniformLocations[0], 6.86617); 1242 | gl.drawArrays(4, 0, 3); 1243 | yield; 1244 | gl.uniform1f(WebGLUniformLocations[0], 6.8822600000000005); 1245 | gl.drawArrays(4, 0, 3); 1246 | yield; 1247 | gl.uniform1f(WebGLUniformLocations[0], 6.899240000000001); 1248 | gl.drawArrays(4, 0, 3); 1249 | yield; 1250 | gl.uniform1f(WebGLUniformLocations[0], 6.91572); 1251 | gl.drawArrays(4, 0, 3); 1252 | yield; 1253 | gl.uniform1f(WebGLUniformLocations[0], 6.932755); 1254 | gl.drawArrays(4, 0, 3); 1255 | yield; 1256 | gl.uniform1f(WebGLUniformLocations[0], 6.949000000000001); 1257 | gl.drawArrays(4, 0, 3); 1258 | yield; 1259 | gl.uniform1f(WebGLUniformLocations[0], 6.966165); 1260 | gl.drawArrays(4, 0, 3); 1261 | yield; 1262 | gl.uniform1f(WebGLUniformLocations[0], 6.982315000000001); 1263 | gl.drawArrays(4, 0, 3); 1264 | yield; 1265 | gl.uniform1f(WebGLUniformLocations[0], 6.99948); 1266 | gl.drawArrays(4, 0, 3); 1267 | yield; 1268 | gl.uniform1f(WebGLUniformLocations[0], 7.015975000000001); 1269 | gl.drawArrays(4, 0, 3); 1270 | yield; 1271 | gl.uniform1f(WebGLUniformLocations[0], 7.032920000000001); 1272 | gl.drawArrays(4, 0, 3); 1273 | yield; 1274 | gl.uniform1f(WebGLUniformLocations[0], 7.049125000000001); 1275 | gl.drawArrays(4, 0, 3); 1276 | yield; 1277 | gl.uniform1f(WebGLUniformLocations[0], 7.06613); 1278 | gl.drawArrays(4, 0, 3); 1279 | yield; 1280 | gl.uniform1f(WebGLUniformLocations[0], 7.0822400000000005); 1281 | gl.drawArrays(4, 0, 3); 1282 | yield; 1283 | gl.uniform1f(WebGLUniformLocations[0], 7.099185); 1284 | gl.drawArrays(4, 0, 3); 1285 | yield; 1286 | gl.uniform1f(WebGLUniformLocations[0], 7.115515); 1287 | gl.drawArrays(4, 0, 3); 1288 | yield; 1289 | gl.uniform1f(WebGLUniformLocations[0], 7.132515000000001); 1290 | gl.drawArrays(4, 0, 3); 1291 | yield; 1292 | gl.uniform1f(WebGLUniformLocations[0], 7.1491050000000005); 1293 | gl.drawArrays(4, 0, 3); 1294 | yield; 1295 | gl.uniform1f(WebGLUniformLocations[0], 7.16612); 1296 | gl.drawArrays(4, 0, 3); 1297 | yield; 1298 | gl.uniform1f(WebGLUniformLocations[0], 7.182230000000001); 1299 | gl.drawArrays(4, 0, 3); 1300 | yield; 1301 | gl.uniform1f(WebGLUniformLocations[0], 7.19995); 1302 | gl.drawArrays(4, 0, 3); 1303 | yield; 1304 | gl.uniform1f(WebGLUniformLocations[0], 7.216335000000001); 1305 | gl.drawArrays(4, 0, 3); 1306 | } 1307 | -------------------------------------------------------------------------------- /webgl-recorder.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | var getContext = HTMLCanvasElement.prototype.getContext; 3 | var requestAnimationFrame = window.requestAnimationFrame; 4 | var frameSincePageLoad = 0; 5 | 6 | function countFrames() { 7 | frameSincePageLoad++; 8 | requestAnimationFrame(countFrames); 9 | } 10 | 11 | window.requestAnimationFrame = function() { 12 | return requestAnimationFrame.apply(window, arguments); 13 | }; 14 | 15 | HTMLCanvasElement.prototype.getContext = function(type) { 16 | const canvas = this; 17 | const context = getContext.apply(canvas, arguments); 18 | 19 | if (type === 'webgl' || type === 'experimental-webgl') { 20 | let oldWidth = canvas.width; 21 | let oldHeight = canvas.height; 22 | let oldFrameCount = frameSincePageLoad; 23 | const trace = []; 24 | const variables = {}; 25 | 26 | trace.push(' gl.canvas.width = ' + oldWidth + ';'); 27 | trace.push(' gl.canvas.height = ' + oldHeight + ';'); 28 | 29 | function compileTrace() { 30 | let text = 'function* render(gl) {\n'; 31 | text += ' // Recorded using https://github.com/evanw/webgl-recorder\n'; 32 | for (let key in variables) { 33 | text += ' const ' + key + 's = [];\n'; 34 | } 35 | text += trace.join('\n'); 36 | text += '\n}\n'; 37 | return text; 38 | } 39 | 40 | function downloadTrace() { 41 | const text = compileTrace(); 42 | const link = document.createElement('a'); 43 | link.href = URL.createObjectURL(new Blob([text], {type: 'application/javascript'})); 44 | link.download = 'trace.js'; 45 | document.body.appendChild(link); 46 | link.click(); 47 | document.body.removeChild(link); 48 | } 49 | 50 | function getVariable(value) { 51 | if (value instanceof WebGLActiveInfo || 52 | value instanceof WebGLBuffer || 53 | value instanceof WebGLFramebuffer || 54 | value instanceof WebGLProgram || 55 | value instanceof WebGLRenderbuffer || 56 | value instanceof WebGLShader || 57 | value instanceof WebGLShaderPrecisionFormat || 58 | value instanceof WebGLTexture || 59 | value instanceof WebGLUniformLocation || 60 | value instanceof WebGLVertexArrayObject || 61 | // In Chrome, value won't be an instanceof WebGLVertexArrayObject. 62 | (value && value.constructor.name == "WebGLVertexArrayObjectOES") || 63 | typeof value === 'object') { 64 | const name = value.constructor.name; 65 | const list = variables[name] || (variables[name] = []); 66 | let index = list.indexOf(value); 67 | 68 | if (index === -1) { 69 | index = list.length; 70 | list.push(value); 71 | } 72 | 73 | return name + 's[' + index + ']'; 74 | } 75 | 76 | return null; 77 | } 78 | 79 | function patch(name, object) { 80 | const patched = {}; 81 | for (const key in object) { 82 | const value = object[key]; 83 | if (typeof value === 'function') { 84 | patched[key] = function () { 85 | const result = value.apply(object, arguments); 86 | 87 | if (frameSincePageLoad !== oldFrameCount) { 88 | oldFrameCount = frameSincePageLoad; 89 | trace.push(' yield;'); 90 | } 91 | 92 | if (canvas.width !== oldWidth || canvas.height !== oldHeight) { 93 | oldWidth = canvas.width; 94 | oldHeight = canvas.height; 95 | trace.push(' gl.canvas.width = ' + oldWidth + ';'); 96 | trace.push(' gl.canvas.height = ' + oldHeight + ';'); 97 | } 98 | 99 | const args = Array.prototype.map.call(arguments, arg => { 100 | if (typeof arg === 'number' || typeof arg === 'boolean' || typeof arg === 'string' || arg === null) { 101 | return JSON.stringify(arg); 102 | } else if (ArrayBuffer.isView(arg)) { 103 | return `new ${arg.constructor.name}([${Array.prototype.slice.call(arg)}])`; 104 | } else { 105 | const variable = getVariable(arg); 106 | if (variable !== null) { 107 | return variable; 108 | } else { 109 | console.warn('unsupported value:', arg, `in call to ${name}.${key}`); 110 | return 'null'; 111 | } 112 | } 113 | }); 114 | 115 | let text = `${name}.${key}(${args.join(', ')});`; 116 | const variable = getVariable(result); 117 | if (variable !== null) text = `${variable} = ${text}`; 118 | trace.push(' ' + text); 119 | 120 | if (result === null) return null; 121 | if (result === undefined) return undefined; 122 | // In Firefox, getExtension returns things with constructor.name == 'Object', but in 123 | // Chrome getExtension returns unique constructor.names. 124 | if (result.constructor.name === 'Object' || key == 'getExtension') { 125 | return patch(variable, result); 126 | } 127 | return result; 128 | }; 129 | } else { // typeof value !== function 130 | Object.defineProperty(patched, key, { 131 | configurable: false, 132 | enumerable: true, 133 | get() { 134 | return object[key]; 135 | } 136 | }); 137 | } 138 | } 139 | return patched; 140 | } 141 | 142 | const fakeContext = patch('gl', context); 143 | Object.assign(fakeContext, { 144 | trace: trace, 145 | compileTrace: compileTrace, 146 | downloadTrace: downloadTrace, 147 | }); 148 | return fakeContext; 149 | } 150 | 151 | return context; 152 | }; 153 | 154 | countFrames(); 155 | })(); 156 | --------------------------------------------------------------------------------