2013-05-22 11 views
6

In uno shader GLSL, voglio creare una funzione che sembra un po 'come questo:È possibile passare un array di dimensioni fisse come parametro della funzione GLSL?

void MyFunction(out float results[9]) 
{ 
    float value0 = 3.1546; 
    float value1 = 42;  // whatever value  
    /* ... long, complicated code ... */ 

    results[0] = value0; 
    results[1] = value1; 
    results[2] = value2; 
    ... 
} 

Può una tale firma funzione di essere utilizzato e compilato in GLSL?
Se no, ci sono delle alternative?

risposta

5

Sì, questo è il codice GLSL legale.

Ciò non significa che verrà compilato, ma è un codice legale. Detto questo, è probabilmente meglio restituire l'array (cosa che si può fare anche), piuttosto che passarlo come parametro di output.

+0

Hai ragione. Ho trovato le informazioni anche nelle specifiche: http://www.opengl.org/registry/doc/GLSLangSpec.4.30.6.pdf#page=35 – wil

+2

Perché è probabilmente meglio restituire l'array? c'è qualche ottimizzazione del compilatore con l'utilizzo di un locale e la restituzione invece di modificare una variabile sul posto? –

Problemi correlati