From 7451a7cd157e2ff9709fac8c21ef0c7b396103de Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Fri, 13 Jun 2014 15:16:34 -0700 Subject: parse shader uniforms in format |uniform type a, b;| --- src/webGLWorker.js | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) (limited to 'src') 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); + } + }); }); }); }; -- cgit v1.2.3-70-g09d2