aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2014-06-06 13:37:03 -0700
committerAlon Zakai <alonzakai@gmail.com>2014-06-06 13:37:36 -0700
commit949a025d0faaa95b86ced2951cefa33ecbd173aa (patch)
tree1b849d08804effd974f55cf928f09566b37bcb18
parent459cd6a71c0dd1bcb15eaa69e9ffcab18a69f8dc (diff)
prefetch gl before running worker
-rw-r--r--src/proxyClient.js2
-rw-r--r--src/proxyWorker.js6
-rw-r--r--src/webGLClient.js10
-rw-r--r--src/webGLWorker.js1
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);