diff options
author | Alon Zakai <alonzakai@gmail.com> | 2014-06-13 15:16:34 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2014-06-13 15:16:34 -0700 |
commit | 7451a7cd157e2ff9709fac8c21ef0c7b396103de (patch) | |
tree | 1fd5a0a22622cfe3cd832e0c4a5670429437bb4d /src | |
parent | 1b5036619a81daea2f781dc8dab101bda8292fa8 (diff) |
parse shader uniforms in format |uniform type a, b;|
Diffstat (limited to 'src')
-rw-r--r-- | src/webGLWorker.js | 31 |
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); + } + }); }); }); }; |