Ok, I quickly hacked the glGetUniformLocation function in library_gl.js locally like this, and it works. But I'm not exactly a JavaScript expert, don't know whether this is efficient, GL.uniformTable would basically be a 2-dimensional map, with program and name as keys:
glGetUniformLocation: function(program, name) {
name = Pointer_stringify(name);
if (!GL.uniformTable[program])
{
GL.uniformTable[program] = {};
}
var id = GL.uniformTable[program][name];
if (id) return id;
var loc = Module.ctx.getUniformLocation(GL.programs[program], name);
if (!loc) return -1;
id = GL.getNewId(GL.uniforms);
GL.uniforms[id] = loc;
GL.uniformTable[program][name] = id;
return id;
},
And lo-and-behold, the first working skinned-character-rendering in Nebula3, this is only the NormalDepth-Pass in the pre-light-pass renderer:

I'll continue with the renderer stuff, and then look at optimization options. Guess I'll be back here soon with more questions ;)
Cheers,
-Floh