2012-05-06 18 views

Respuesta

17

Desde el OpenGL ES SL 1.0 spec párrafo 4.1.9 Arrays (p. 24):

No existe ningún mecanismo para inicializar matrices en tiempo de declaración desde dentro de un sombreador.

Tenga en cuenta que esto ha sido intencionalmente omitido. De acuerdo con this post, la versión de OpenGL ES SL para OpenGL ES 2 se basa en OpenGL SL 1.2. El mismo párrafo (. P 20) contiene:

Las matrices pueden tener inicializadores formados a partir de los constructores de matriz:

 float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1); 
     float a[5] = float[](3.4, 4.2, 5.0, 5.2, 1.1); // same thing 
+0

Sí, pero parece que puede hacerlo para matrices de const, ¡pruébalo! –

+0

@Stefan ¿Entonces puede inicializar una matriz de const en gl es sl 1.0? –

+0

@Viktor Sehr He citado las especificaciones. No utilice las características que admite una implementación, pero no están estrictamente cubiertas. El código podría no funcionar. Ver también el comentario de Reto Koradi sobre la otra respuesta aquí. –

1
precision highp float; 

const float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1); 

Está funcionando con la versión Android KitKat (OpenGL ES 2.0).

+4

¿Qué GPU hay en tu dispositivo? Esto se parece a un error del compilador de sombreado para permitir esto, ya que la especificación de ES 2.0 dice claramente: "No hay ningún mecanismo para inicializar las matrices en el momento de la declaración desde dentro de un sombreador". Algunos compiladores son bastante liberales sobre la posibilidad de permitir las características de ES 3.0 en los sombreadores ES 2.0 sin informar errores. El problema es que el mismo código fallará en los dispositivos con GPU de diferentes proveedores. –

Cuestiones relacionadas