Establecer los valores de una matriz de estructuras de JS a GLSL

He intentado crear una estructura que contenga todas las luces de mi aplicación WebGL, y tengo problemas para configurar sus valores de JS. La estructura es la siguiente:

struct Light { vec4 position; vec4 ambient; vec4 diffuse; vec4 specular; vec3 spotDirection; float spotCutOff; float constantAttenuation; float linearAttenuation; float quadraticAttenuation; float spotExponent; float spotLightCosCutOff; }; uniform Light lights[numLights]; 

Después de probar MUCHAS cosas, lo hice funcionar pero no estoy contento con el código que escribí:

 program.uniform.lights = []; program.uniform.lights.push({ position: "", diffuse: "", specular: "", ambient: "", spotDirection: "", spotCutOff: "", constantAttenuation: "", linearAttenuation: "", quadraticAttenuation: "", spotExponent: "", spotLightCosCutOff: "" }); program.uniform.lights[0].position = gl.getUniformLocation(program, "lights[0].position"); program.uniform.lights[0].diffuse = gl.getUniformLocation(program, "lights[0].diffuse"); program.uniform.lights[0].specular = gl.getUniformLocation(program, "lights[0].specular"); program.uniform.lights[0].ambient = gl.getUniformLocation(program, "lights[0].ambient"); ... and so on 

Lamento haberte hecho ver este código, sé que es horrible pero no puedo encontrar una mejor manera.

¿Hay una manera estándar o recomendada de hacer esto correctamente? ¿Alguien puede iluminarme?

¿Qué tal algo como esto?

 var props = ['position', 'diffuse', 'specular', 'ambient'] for (var i = 0; i!=maxLights; ++i) { for (var j in props) { prop = props[j]; eval('program.uniform.lights[' + i + '].' + prop + ' = gl.getUniformLocation(program, "lights[' + i + ']." + prop); } }