diff options
author | Alon Zakai <alonzakai@gmail.com> | 2014-06-06 13:37:03 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2014-06-06 13:37:36 -0700 |
commit | 949a025d0faaa95b86ced2951cefa33ecbd173aa (patch) | |
tree | 1b849d08804effd974f55cf928f09566b37bcb18 | |
parent | 459cd6a71c0dd1bcb15eaa69e9ffcab18a69f8dc (diff) |
prefetch gl before running worker
-rw-r--r-- | src/proxyClient.js | 2 | ||||
-rw-r--r-- | src/proxyWorker.js | 6 | ||||
-rw-r--r-- | src/webGLClient.js | 10 | ||||
-rw-r--r-- | src/webGLWorker.js | 1 |
4 files changed, 15 insertions, 4 deletions
diff --git a/src/proxyClient.js b/src/proxyClient.js index ff961f9c..62ae2492 100644 --- a/src/proxyClient.js +++ b/src/proxyClient.js @@ -26,6 +26,8 @@ window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequest var worker = new Worker('{{{ filename }}}.js'); +WebGLClient.prefetch(); // XXX not guaranteed to be before worker main() + var workerResponded = false; worker.onmessage = function worker_onmessage(event) { diff --git a/src/proxyWorker.js b/src/proxyWorker.js index d4a2e0e8..459365cd 100644 --- a/src/proxyWorker.js +++ b/src/proxyWorker.js @@ -38,6 +38,8 @@ window.close = function window_close() { postMessage({ target: 'window', method: 'close' }); }; +var webGLWorker = new WebGLWorker(); + var document = new EventListener(); document.createElement = function document_createElement(what) { @@ -75,7 +77,7 @@ document.createElement = function document_createElement(what) { } }; } else { - return new WebGLWorker(); + return webGLWorker; } }; canvas.boundingClientRect = {}; @@ -160,7 +162,7 @@ onmessage = function onmessage(message) { break; } case 'gl': { - Module.ctx.onmessage(message.data); + webGLWorker.onmessage(message.data); break; } default: throw 'wha? ' + message.data.target; diff --git a/src/webGLClient.js b/src/webGLClient.js index 193d5dfa..81310814 100644 --- a/src/webGLClient.js +++ b/src/webGLClient.js @@ -1,10 +1,16 @@ // WebGLWorker client code function WebGLClient() { +} + +WebGLClient.prefetch = function() { + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('webgl-experimental') || canvas.getContext('webgl'); + if (!ctx) return; var data = {}; ['MAX_VERTEX_ATTRIBS'].forEach(function(name) { - data[name] = Module.ctx.getParameter(Module.ctx[name]); + data[ctx[name]] = ctx.getParameter(ctx[name]); }); worker.postMessage({ target: 'gl', op: 'setPrefetchedParameters', data: data }); -} +}; diff --git a/src/webGLWorker.js b/src/webGLWorker.js index a6b6b4d2..2a8e47ff 100644 --- a/src/webGLWorker.js +++ b/src/webGLWorker.js @@ -457,6 +457,7 @@ function WebGLWorker() { } this.getParameter = function(name) { + dump('worker getParameter ' + JSON.stringify(this.prefetchedParameters) + '\n'); assert(name); if (name in this.prefetchedParameters) return this.prefetchedParameters[name]; throw 'TODO: get parameter ' + name + ' : ' + revname(name); |