aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2014-06-23 12:53:41 -0700
committerAlon Zakai <alonzakai@gmail.com>2014-06-23 12:53:41 -0700
commitb53a1352479177dc7bb0646be1a3ace72eba3755 (patch)
treeb1bfa04e18591a71ef1349f567e668a1049ba241
parentb2e7db0e1d8a0cc5317d4ecfe0c359c477fd73df (diff)
stop passing string call names in gl proxying
-rw-r--r--src/webGLClient.js70
-rw-r--r--src/webGLWorker.js128
2 files changed, 133 insertions, 65 deletions
diff --git a/src/webGLClient.js b/src/webGLClient.js
index 82ffdf5c..1ae7332d 100644
--- a/src/webGLClient.js
+++ b/src/webGLClient.js
@@ -7,6 +7,74 @@ function assert(x) {
function WebGLClient() {
var objects = {};
+ var calls = {
+ 0: { name: 'NULL' },
+ 1: { name: 'getExtension' },
+ 2: { name: 'enable' },
+ 3: { name: 'disable' },
+ 4: { name: 'clear' },
+ 5: { name: 'clearColor' },
+ 6: { name: 'createShader' },
+ 7: { name: 'deleteShader' },
+ 8: { name: 'shaderSource' },
+ 9: { name: 'compileShader' },
+ 10: { name: 'createProgram' },
+ 11: { name: 'deleteProgram' },
+ 12: { name: 'attachShader' },
+ 13: { name: 'bindAttribLocation' },
+ 14: { name: 'linkProgram' },
+ 15: { name: 'getProgramParameter' },
+ 16: { name: 'getUniformLocation' },
+ 17: { name: 'useProgram' },
+ 18: { name: 'uniform1i' },
+ 19: { name: 'uniform1f' },
+ 20: { name: 'uniform3fv' },
+ 21: { name: 'uniform4fv' },
+ 22: { name: 'uniformMatrix4fv' },
+ 23: { name: 'vertexAttrib4fv' },
+ 24: { name: 'createBuffer' },
+ 25: { name: 'deleteBuffer' },
+ 26: { name: 'bindBuffer' },
+ 27: { name: 'bufferData' },
+ 28: { name: 'bufferSubData' },
+ 29: { name: 'viewport' },
+ 30: { name: 'vertexAttribPointer' },
+ 31: { name: 'enableVertexAttribArray' },
+ 32: { name: 'disableVertexAttribArray' },
+ 33: { name: 'drawArrays' },
+ 34: { name: 'drawElements' },
+ 35: { name: 'getError' },
+ 36: { name: 'createTexture' },
+ 37: { name: 'deleteTexture' },
+ 38: { name: 'bindTexture' },
+ 39: { name: 'texParameteri' },
+ 40: { name: 'texImage2D' },
+ 41: { name: 'compressedTexImage2D' },
+ 42: { name: 'activeTexture' },
+ 43: { name: 'getShaderParameter' },
+ 44: { name: 'clearDepth' },
+ 45: { name: 'depthFunc' },
+ 46: { name: 'frontFace' },
+ 47: { name: 'cullFace' },
+ 48: { name: 'pixelStorei' },
+ 49: { name: 'depthMask' },
+ 50: { name: 'depthRange' },
+ 51: { name: 'blendFunc' },
+ 52: { name: 'scissor' },
+ 53: { name: 'colorMask' },
+ 54: { name: 'lineWidth' },
+ 55: { name: 'createFramebuffer' },
+ 56: { name: 'deleteFramebuffer' },
+ 57: { name: 'bindFramebuffer' },
+ 58: { name: 'framebufferTexture2D' },
+ 59: { name: 'createRenderbuffer' },
+ 60: { name: 'deleteRenderbuffer' },
+ 61: { name: 'bindRenderbuffer' },
+ 62: { name: 'renderbufferStorage' },
+ 63: { name: 'framebufferRenderbuffer' },
+ 64: { name: 'debugPrint' },
+ };
+
function fixArgs(command, args) {
switch (command) {
case 'deleteFramebuffer':
@@ -50,7 +118,7 @@ function WebGLClient() {
var len = buffer.length;
//dump('issuing commands, buffer len: ' + len + '\n');
while (i < len) {
- var command = buffer[i++];
+ var command = calls[buffer[i++]].name;
assert(typeof command === 'string')
var numArgs = buffer[i++];
assert(typeof numArgs === 'number', command);
diff --git a/src/webGLWorker.js b/src/webGLWorker.js
index 6dae2b15..4ca28fa9 100644
--- a/src/webGLWorker.js
+++ b/src/webGLWorker.js
@@ -513,61 +513,61 @@ function WebGLWorker() {
this.getExtension = function(name) {
var i = this.prefetchedExtensions.indexOf(name);
if (i < 0) return null;
- commandBuffer.push('getExtension', 1, name);
+ commandBuffer.push(1, 1, name);
return true; // TODO: return an object here
};
this.getSupportedExtensions = function() {
return this.prefetchedExtensions;
};
this.enable = function(cap) {
- commandBuffer.push('enable', 1, cap);
+ commandBuffer.push(2, 1, cap);
};
this.disable = function(cap) {
- commandBuffer.push('disable', 1, cap);
+ commandBuffer.push(3, 1, cap);
};
this.clear = function(mask) {
- commandBuffer.push('clear', 1, mask);
+ commandBuffer.push(4, 1, mask);
};
this.clearColor = function(r, g, b, a) {
- commandBuffer.push('clearColor', 4, r, g, b, a);
+ commandBuffer.push(5, 4, r, g, b, a);
};
this.createShader = function(type) {
var id = nextId++;
- commandBuffer.push('createShader', -2, type, id);
+ commandBuffer.push(6, -2, type, id);
return { id: id, what: 'shader', type: type };
};
this.deleteShader = function(shader) {
if (!shader) return;
- commandBuffer.push('deleteShader', 1, shader.id);
+ commandBuffer.push(7, 1, shader.id);
};
this.shaderSource = function(shader, source) {
shader.source = source;
- commandBuffer.push('shaderSource', 2, shader.id, source);
+ commandBuffer.push(8, 2, shader.id, source);
};
this.compileShader = function(shader) {
- commandBuffer.push('compileShader', 1, shader.id);
+ commandBuffer.push(9, 1, shader.id);
};
this.getShaderInfoLog = function(shader) {
return ''; // optimistic assumption of success; no proxying
};
this.createProgram = function() {
var id = nextId++;
- commandBuffer.push('createProgram', -1, id);
+ commandBuffer.push(10, -1, id);
return new WebGLProgram(id);
};
this.deleteProgram = function(program) {
if (!program) return;
- commandBuffer.push('deleteProgram', 1, program.id);
+ commandBuffer.push(11, 1, program.id);
};
this.attachShader = function(program, shader) {
program.shaders.push(shader);
- commandBuffer.push('attachShader', 2, program.id, shader.id);
+ commandBuffer.push(12, 2, program.id, shader.id);
};
this.bindAttribLocation = function(program, index, name) {
program.attributes[name] = { what: 'attribute', name: name, size: -1, location: index }; // fill in size later
program.attributeVec[index] = name;
- commandBuffer.push('bindAttribLocation', 3, program.id, index, name);
+ commandBuffer.push(13, 3, program.id, index, name);
};
this.getAttribLocation = function(program, name) {
// all existing attribs are cached locally
@@ -621,7 +621,7 @@ function WebGLWorker() {
program.attributes[attr].size = existingAttributes[attr].size;
}
- commandBuffer.push('linkProgram', 1, program.id);
+ commandBuffer.push(14, 1, program.id);
};
this.getProgramParameter = function(program, name) {
switch (name) {
@@ -629,7 +629,7 @@ function WebGLWorker() {
case this.ACTIVE_ATTRIBUTES: return program.attributeVec.length;
case this.LINK_STATUS: {
// optimisticaly return success; client will abort on an actual error. we assume an error-free async workflow
- commandBuffer.push('getProgramParameter', 2, program.id, name);
+ commandBuffer.push(15, 2, program.id, name);
return true;
}
default: throw 'bad getProgramParameter ' + revname(name);
@@ -656,50 +656,50 @@ function WebGLWorker() {
}
if (!(name in program.uniforms)) return null;
var id = nextId++;
- commandBuffer.push('getUniformLocation', -3, program.id, fullname, id);
+ commandBuffer.push(16, -3, program.id, fullname, id);
return { what: 'location', uniform: program.uniforms[name], id: id, index: index };
};
this.getProgramInfoLog = function(shader) {
return ''; // optimistic assumption of success; no proxying
};
this.useProgram = function(program) {
- commandBuffer.push('useProgram', 1, program ? program.id : 0);
+ commandBuffer.push(17, 1, program ? program.id : 0);
bindings.program = program;
};
this.uniform1i = function(location, data) {
if (!location) return;
- commandBuffer.push('uniform1i', 2, location.id, data);
+ commandBuffer.push(18, 2, location.id, data);
};
this.uniform1f = function(location, data) {
if (!location) return;
- commandBuffer.push('uniform1f', 2, location.id, data);
+ commandBuffer.push(19, 2, location.id, data);
};
this.uniform3fv = function(location, data) {
if (!location) return;
- commandBuffer.push('uniform3fv', 2, location.id, new Float32Array(data));
+ commandBuffer.push(20, 2, location.id, new Float32Array(data));
};
this.uniform4fv = function(location, data) {
if (!location) return;
- commandBuffer.push('uniform4fv', 2, location.id, new Float32Array(data));
+ commandBuffer.push(21, 2, location.id, new Float32Array(data));
};
this.uniformMatrix4fv = function(location, transpose, data) {
if (!location) return;
- commandBuffer.push('uniformMatrix4fv', 3, location.id, transpose, new Float32Array(data));
+ commandBuffer.push(22, 3, location.id, transpose, new Float32Array(data));
};
this.vertexAttrib4fv = function(index, values) {
- commandBuffer.push('vertexAttrib4fv', 2, index, new Float32Array(values));
+ commandBuffer.push(23, 2, index, new Float32Array(values));
};
this.createBuffer = function() {
var id = nextId++;
- commandBuffer.push('createBuffer', -1, id);
+ commandBuffer.push(24, -1, id);
return new WebGLBuffer(id);
};
this.deleteBuffer = function(buffer) {
if (!buffer) return;
- commandBuffer.push('deleteBuffer', 1, buffer.id);
+ commandBuffer.push(25, 1, buffer.id);
};
this.bindBuffer = function(target, buffer) {
- commandBuffer.push('bindBuffer', 2, target, buffer ? buffer.id : 0);
+ commandBuffer.push(26, 2, target, buffer ? buffer.id : 0);
switch (target) {
case this.ARRAY_BUFFER_BINDING: {
bindings.arrayBuffer = buffer;
@@ -713,43 +713,43 @@ function WebGLWorker() {
};
this.bufferData = function(target, something, usage) {
if (typeof something !== 'number') something = new something.constructor(something);
- commandBuffer.push('bufferData', 3, target, something, usage);
+ commandBuffer.push(27, 3, target, something, usage);
};
this.bufferSubData = function(target, offset, something) {
if (typeof something !== 'number') something = new something.constructor(something);
- commandBuffer.push('bufferSubData', 3, target, offset, something);
+ commandBuffer.push(28, 3, target, offset, something);
};
this.viewport = function(x, y, w, h) {
- commandBuffer.push('viewport', 4, x, y, w, h);
+ commandBuffer.push(29, 4, x, y, w, h);
};
this.vertexAttribPointer = function(index, size, type, normalized, stride, offset) {
- commandBuffer.push('vertexAttribPointer', 6, index, size, type, normalized, stride, offset);
+ commandBuffer.push(30, 6, index, size, type, normalized, stride, offset);
};
this.enableVertexAttribArray = function(index) {
- commandBuffer.push('enableVertexAttribArray', 1, index);
+ commandBuffer.push(31, 1, index);
};
this.disableVertexAttribArray = function(index) {
- commandBuffer.push('disableVertexAttribArray', 1, index);
+ commandBuffer.push(32, 1, index);
};
this.drawArrays = function(mode, first, count) {
- commandBuffer.push('drawArrays', 3, mode, first, count);
+ commandBuffer.push(33, 3, mode, first, count);
};
this.drawElements = function(mode, count, type, offset) {
- commandBuffer.push('drawElements', 4, mode, count, type, offset);
+ commandBuffer.push(34, 4, mode, count, type, offset);
};
this.getError = function() {
// optimisticaly return success; client will abort on an actual error. we assume an error-free async workflow
- commandBuffer.push('getError', 0);
+ commandBuffer.push(35, 0);
return this.NO_ERROR;
};
this.createTexture = function() {
var id = nextId++;
- commandBuffer.push('createTexture', -1, id);
+ commandBuffer.push(36, -1, id);
return new WebGLTexture(id);
};
this.deleteTexture = function(texture) {
if (!texture) return;
- commandBuffer.push('deleteTexture', 1, texture.id);
+ commandBuffer.push(37, 1, texture.id);
texture.id = 0;
};
this.isTexture = function(texture) {
@@ -763,106 +763,106 @@ function WebGLWorker() {
}
}
texture.binding = target;
- commandBuffer.push('bindTexture', 2, target, texture ? texture.id : 0);
+ commandBuffer.push(38, 2, target, texture ? texture.id : 0);
};
this.texParameteri = function(target, pname, param) {
- commandBuffer.push('texParameteri', 3, target, pname, param);
+ commandBuffer.push(39, 3, target, pname, param);
};
this.texImage2D = function(target, level, internalformat, width, height, border, format, type, pixels) {
assert(pixels || pixels === null); // we do not support the overloads that have fewer params
- commandBuffer.push('texImage2D', 9, target, level, internalformat, width, height, border, format, type, pixels ? new pixels.constructor(pixels) : pixels);
+ commandBuffer.push(40, 9, target, level, internalformat, width, height, border, format, type, pixels ? new pixels.constructor(pixels) : pixels);
};
this.compressedTexImage2D = function(target, level, internalformat, width, height, border, pixels) {
- commandBuffer.push('compressedTexImage2D', 7, target, level, internalformat, width, height, border, new pixels.constructor(pixels));
+ commandBuffer.push(41, 7, target, level, internalformat, width, height, border, new pixels.constructor(pixels));
};
this.activeTexture = function(texture) {
- commandBuffer.push('activeTexture', 1, texture);
+ commandBuffer.push(42, 1, texture);
};
this.getShaderParameter = function(shader, pname) {
switch (pname) {
case this.SHADER_TYPE: return shader.type;
case this.COMPILE_STATUS: {
// optimisticaly return success; client will abort on an actual error. we assume an error-free async workflow
- commandBuffer.push('getShaderParameter', 2, shader.id, pname);
+ commandBuffer.push(43, 2, shader.id, pname);
return true;
}
default: throw 'unsupported getShaderParameter ' + pname;
}
};
this.clearDepth = function(depth) {
- commandBuffer.push('clearDepth', 1, depth);
+ commandBuffer.push(44, 1, depth);
};
this.depthFunc = function(depth) {
- commandBuffer.push('depthFunc', 1, depth);
+ commandBuffer.push(45, 1, depth);
};
this.frontFace = function(depth) {
- commandBuffer.push('frontFace', 1, depth);
+ commandBuffer.push(46, 1, depth);
};
this.cullFace = function(depth) {
- commandBuffer.push('cullFace', 1, depth);
+ commandBuffer.push(47, 1, depth);
};
this.readPixels = function(depth) {
abort('readPixels is impossible, we are async GL');
};
this.pixelStorei = function(pname, param) {
- commandBuffer.push('pixelStorei', 2, pname, param);
+ commandBuffer.push(48, 2, pname, param);
};
this.depthMask = function(flag) {
- commandBuffer.push('depthMask', 1, flag);
+ commandBuffer.push(49, 1, flag);
};
this.depthRange = function(near, far) {
- commandBuffer.push('depthRange', 2, near, far);
+ commandBuffer.push(50, 2, near, far);
};
this.blendFunc = function(sfactor, dfactor) {
- commandBuffer.push('blendFunc', 2, sfactor, dfactor);
+ commandBuffer.push(51, 2, sfactor, dfactor);
};
this.scissor = function(x, y, width, height) {
- commandBuffer.push('scissor', 4, x, y, width, height);
+ commandBuffer.push(52, 4, x, y, width, height);
};
this.colorMask = function(red, green, blue, alpha) {
- commandBuffer.push('colorMask', 4, red, green, blue, alpha);
+ commandBuffer.push(53, 4, red, green, blue, alpha);
};
this.lineWidth = function(width) {
- commandBuffer.push('lineWidth', 1, width);
+ commandBuffer.push(54, 1, width);
};
this.createFramebuffer = function() {
var id = nextId++;
- commandBuffer.push('createFramebuffer', -1, id);
+ commandBuffer.push(55, -1, id);
return new WebGLFramebuffer(id);
};
this.deleteFramebuffer = function(framebuffer) {
if (!framebuffer) return;
- commandBuffer.push('deleteFramebuffer', 1, framebuffer.id);
+ commandBuffer.push(56, 1, framebuffer.id);
};
this.bindFramebuffer = function(target, framebuffer) {
- commandBuffer.push('bindFramebuffer', 2, target, framebuffer ? framebuffer.id : 0);
+ commandBuffer.push(57, 2, target, framebuffer ? framebuffer.id : 0);
};
this.framebufferTexture2D = function(target, attachment, textarget, texture, level) {
- commandBuffer.push('framebufferTexture2D', 5, target, attachment, textarget, texture ? texture.id : 0, level);
+ commandBuffer.push(58, 5, target, attachment, textarget, texture ? texture.id : 0, level);
};
this.checkFramebufferStatus = function(target) {
return this.FRAMEBUFFER_COMPLETE; // XXX totally wrong
};
this.createRenderbuffer = function() {
var id = nextId++;
- commandBuffer.push('createRenderbuffer', -1, id);
+ commandBuffer.push(59, -1, id);
return new WebGLRenderbuffer(id);
};
this.deleteRenderbuffer = function(renderbuffer) {
if (!renderbuffer) return;
- commandBuffer.push('deleteRenderbuffer', 1, renderbuffer.id);
+ commandBuffer.push(60, 1, renderbuffer.id);
};
this.bindRenderbuffer = function(target, renderbuffer) {
- commandBuffer.push('bindRenderbuffer', 2, target, renderbuffer ? renderbuffer.id : 0);
+ commandBuffer.push(61, 2, target, renderbuffer ? renderbuffer.id : 0);
};
this.renderbufferStorage = function(target, internalformat, width, height) {
- commandBuffer.push('renderbufferStorage', 4, target, internalformat, width, height);
+ commandBuffer.push(62, 4, target, internalformat, width, height);
};
this.framebufferRenderbuffer = function(target, attachment, renderbuffertarget, renderbuffer) {
- commandBuffer.push('framebufferRenderbuffer', 4, target, attachment, renderbuffertarget, renderbuffer ? renderbuffer.id : 0);
+ commandBuffer.push(63, 4, target, attachment, renderbuffertarget, renderbuffer ? renderbuffer.id : 0);
};
//this.debugPrint = function(text) { // useful to interleave debug output properly with client GL commands
- // commandBuffer.push('debugPrint', 1, text);
+ // commandBuffer.push(64, 1, text);
//};
// Setup