2011-06-06 16 views

risposta

11

http://www.khronos.org/registry/webgl/specs/latest/#DYNAMIC_INDEXING_OF_ARRAYS "WebGL consente solo l'indicizzazione dinamica con espressioni costanti, indici di loop o una combinazione.L'unica eccezione è per l'accesso uniforme nei vertex shader, che può essere indicizzato utilizzando qualsiasi espressione."

Hai provato? Se non ha funzionato, ci sono un paio di opzioni.

Se si dispone di un numero ridotto di valori, if-else potrebbe funzionare correttamente. AFAIK i valori uniformi verranno comunque caricati nei registri, quindi fare una dozzina di cicli di matematica su di loro non renderà il tuo shader molto più lento.

Per un numero elevato di valori, le trame sono la soluzione migliore.

+10

è una soluzione alternativa: '/ * dato variabile i è l'indice */for (int x = 0; x

-1

non l'ho provato, ma non ottenere alcun errore di compilazione dal seguente

//index as a float 
attribute lowp float vColorIndex; 
//the array 
uniform vec4 Colors[16]; 

//type cast the float in an int 
int index = int(vColorIndex); 
//use index 
vec4 col = Colors[index]; 
Ci
+0

Questo fallisce in fase di esecuzione. – jes5199

Problemi correlati