2011-11-22 11 views
6

In GLSL-ES è possibile avere array. Ad esempio, il GLSL ES Specification pronunciato la seguente esempio di una variabile uniforme che è un array:È possibile che un attributo vertice sia un array in GLSL-ES 2.0?

uniform vec4 lightPosition[4]; 

È possibile avere vertice attributi che sono array? In altre parole, il seguente è legale secondo le specifiche?

attribute vec4 foo[3]; // three vec4s per vertex 

La risposta (sì o no) è esplicitamente menzionata in qualsiasi punto della specifica GLSL ES? (Non riesco a trovarlo, ma non ho letto ogni riga delle specifiche.)

Inoltre, se è legale, come si inizializza tale attributo utilizzando l'API OpenGL ES 2.0? (Supponendo che sia utilizzato glVertexAttribPointer, qual è il layout dei vertici/elementi-matrice/elementi vettoriali?)

risposta

10

Lo GLSL ES 2.0 specification afferma che gli attributi non possono essere dichiarati come array.

Nel desktop GL, è possibile avere array di attributi. Quando all'attributo viene assegnato un indice di attributo (con glBindAttribLocation o automaticamente dallo shader collegato), otterrà attributi consecutivi, a partire da quello che hai richiesto se hai utilizzato glBindAttribLocation. Quindi, se foo è stata data la posizione 5, foo[0] sarebbero 5, foo[1] sarebbero 6, e foo[2] sarebbero 7.

Se c'è qualche estensione ES 2.0 per consentire le matrici degli attributi, sarebbe probabilmente lavorare in questo modo.

+0

Dove dice la specifica che non possono essere dichiarati come array? –

+2

@LaurenceGonsalves: Sezione 4.3.3, dal titolo abbastanza sorprendentemente "Attributo". È l'ultima frase del primo paragrafo. –

+1

@NicolBolas; Sul desktop è diventato legale utilizzare gli attributi dell'array nella versione 1.5 (GL 3.2), quindi è abbastanza nuovo anche lì. – falstro

Problemi correlati