Poszukuję sposobu użycia funkcji jako argumentu do innej funkcji w GLSL. W zwykłym C można go symulować, przekazując wskaźnik funkcji jako argument funkcji. Wydaje się również, że inne języki (takie jak HLSL) oferują teraz sposoby radzenia sobie z konstruktami wysokiego poziomu, takimi jak funkcje wyższego rzędu, lub mogą symulować je za pomocą clever use of HLSL structures. niestety na razie utknąłem w GLSL i nie mogę znaleźć żadnego sposobu na symulację funkcji wyższego rzędu. Czy w aktualnym (4.2) GLSL jest to naprawdę niemożliwe? Czy może brakuje mi jakiejś sprytnej sztuczki?Funkcje drugiego rzędu w GLSL?
Typowym przykładem co usiłuję osiągnąć:
int f(someType f2, int i) {
return f2(i);
}
I potrzebujesz tego rodzaju (prawdopodobnie kosztownego) pośrednictwa w cieniu, aby osiągnąć ...? –
Oprócz tego, że tego rodzaju abstrakcja byłaby słodka w użyciu, praktyczny problem jaki mam jest następujący: Mam funkcję f, która przełącza parametr p (powiedzmy, int) i wywołuje inną funkcję f2 , która natura zależy od wartości przełączanej. Możliwość przekazania argumentu f2 jako argumentu pozwoli mi zadzwonić bezpośrednio, bez przełączania, ponieważ w kontekście mojej aplikacji dokładnie wiem, jaką funkcję wywołać wewnątrz f, wywołując samą f. Naprawdę nie wiem, czy to możliwe, ani ile by to kosztowało, ale myślę, że przejście na przełącznik 100-case jest prawdopodobnie gorszy. –
https://en.wikipedia.org/wiki/Defunctionalization – sigfpe