aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2014-06-13 15:16:34 -0700
committerAlon Zakai <alonzakai@gmail.com>2014-06-13 15:16:34 -0700
commit7451a7cd157e2ff9709fac8c21ef0c7b396103de (patch)
tree1fd5a0a22622cfe3cd832e0c4a5670429437bb4d /src
parent1b5036619a81daea2f781dc8dab101bda8292fa8 (diff)
parse shader uniforms in format |uniform type a, b;|
Diffstat (limited to 'src')
-rw-r--r--src/webGLWorker.js31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/webGLWorker.js b/src/webGLWorker.js
index a7731767..7364c6b0 100644
--- a/src/webGLWorker.js
+++ b/src/webGLWorker.js
@@ -552,23 +552,24 @@ function WebGLWorker() {
program.uniforms = {};
program.uniformVec = [];
program.shaders.forEach(function(shader) {
- var newUniforms = shader.source.match(/uniform\s+\w+\s+(\w+)(\[\d+\])?;/g);
+ var newUniforms = shader.source.match(/uniform\s+\w+\s+[\w,\s\[\]]+;/g);
if (!newUniforms) return;
newUniforms.forEach(function(uniform) {
- var name = uniform.substr(uniform.lastIndexOf(' ')+1);
- var size = 1;
- var open = name.indexOf('[');
- if (open >= 0) {
- var close = name.indexOf(']');
- size = parseInt(name.substring(open+1, close));
- name = name.substr(0, open);
- } else {
- name = name.substr(0, name.length-1); // remove ';'
- }
- if (!program.uniforms[name]) {
- program.uniforms[name] = { what: 'uniform', name: name, size: size };
- program.uniformVec.push(name);
- }
+ var m = /uniform\s+\w+\s+([\w,\s\[\]]+);/.exec(uniform);
+ assert(m);
+ m[1].split(',').map(function(name) { return name.replace(/\s/g, '') }).filter(function(name) { return !!name }).forEach(function(name) {
+ var size = 1;
+ var open = name.indexOf('[');
+ if (open >= 0) {
+ var close = name.indexOf(']');
+ size = parseInt(name.substring(open+1, close));
+ name = name.substr(0, open);
+ }
+ if (!program.uniforms[name]) {
+ program.uniforms[name] = { what: 'uniform', name: name, size: size };
+ program.uniformVec.push(name);
+ }
+ });
});
});
};