webgl-utils.js (1636B)
1 "use strict"; 2 3 function parseArgs() { 4 var query = window.location.search.substring(1); 5 6 var split = query.split("&"); 7 8 var args = {} 9 for (var i = 0; i < split.length; i++) { 10 var pair = split[i].split("="); 11 12 var key = pair[0]; 13 var value = true; 14 if (pair.length >= 2) { 15 eval("value = " + decodeURIComponent(pair[1]) + ";"); 16 } 17 18 args[key] = value; 19 } 20 21 return args; 22 } 23 24 var gArgs = null; 25 function arg(key, defaultVal) { 26 if (gArgs === null) { 27 gArgs = parseArgs(); 28 } 29 30 if (!(key in gArgs)) 31 return defaultVal; 32 33 return gArgs[key]; 34 } 35 36 function initGL(canvas) { 37 if (arg("nogl")) 38 return null; 39 40 var gl = null; 41 42 var withAA = arg("aa", false); 43 var withAlpha = arg("alpha", false); 44 var withDepth = arg("depth", false); 45 var withPremult = arg("premult", false); 46 var withPreserve = arg("preserve", false); 47 var withStencil = arg("stencil", false); 48 49 try { 50 var argDict = { 51 alpha: withAlpha, 52 depth: withDepth, 53 stencil: withStencil, 54 antialias: withAA, 55 premultipliedAlpha: withPremult, 56 preserveDrawingBuffer: withPreserve, 57 }; 58 gl = canvas.getContext("webgl", argDict); 59 } catch(e) {} 60 61 return gl; 62 } 63 64 function rAF(func) { 65 var raf = window.requestAnimationFrame; 66 raf(func); 67 } 68 69 var MAX_WAIT_FOR_COMPOSITE_DELAY_MS = 500; 70 71 function waitForComposite(func) { 72 var isDone = false; 73 var doneFunc = function () { 74 if (isDone) 75 return; 76 isDone = true; 77 func(); 78 }; 79 80 rAF(doneFunc); 81 setTimeout(doneFunc, MAX_WAIT_FOR_COMPOSITE_DELAY_MS); 82 }