2013-05-22 9 views
6

W cieniującego GLSL, chcę utworzyć funkcję, która wygląda nieco jak poniżej:Czy można przekazać tablicę o stałym rozmiarze jako parametr funkcji 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; 
    ... 
} 

Czy taki podpis funkcja być wykorzystywane i opracowywane w GLSL?
Jeśli nie, czy są jakieś alternatywy?

Odpowiedz

5

Tak, jest to legalny kod GLSL.

To nie znaczy, że na pewno się skompiluje, ale jest to kodeks prawny. Biorąc to pod uwagę, prawdopodobnie lepiej jest po prostu zwrócić tablicę (co też możesz zrobić) zamiast przekazać ją jako parametr wyjściowy.

+0

Masz rację. Znalazłem również informacje w specyfikacji: http://www.opengl.org/registry/doc/GLSLangSpec.4.30.6.pdf#page=35 – wil

+2

Dlaczego lepiej jest zwrócić tablicę? czy jest jakaś optymalizacja kompilatora przy użyciu lokalnego i zwracanie tego zamiast modyfikowania zmiennej w miejscu? –

Powiązane problemy