Básicamente, lo que tengo en mi sombreador es una matriz vec2 uniforme que obtiene su valor en la aplicación JS. Necesito saber la longitud de esta matriz para actuar en consecuencia. array.length() , que me da este error:
ERROR: 0:48: '': métodos admitidos solo en GLSL ES 3.00 y superior
En el lado de JS, puede usar getActiveUniform para recibir WebGLActiveInfo como resultado para cada uniforme. Cada uno tiene un campo de size . Según la página de referencia:
El atributo de tamaño del valor devuelto corresponde a la longitud de la matriz para los uniformes declarados como matrices. De lo contrario, es 1 (esto incluye bloques de interfaz instanciados con arreglos).
Algo como esto:
const max_uniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS); for (let i = 0; i < max_uniforms; i++) { const uniform_info = gl.getActiveUniform(program, i); console.log("uniform " + uniform_info.name + " length is " + uniform_info.size); }