Функции второго порядка в GLSL?


Я ищу способ использовать функцию в качестве аргумента для другой функции в GLSL. В обычном языке Си он может быть смоделирован путем передачи указателя функции в качестве аргумента функции. Также кажется, что другие языки (например, HLSL) теперь предоставляют способы работы с высокоуровневыми конструкциями, такими как функции более высокого порядка, или могут имитировать их с помощью умного использования структур HLSL. к сожалению, я застрял с GLSL на данный момент, и я не могу найти никакого способа для моделирования функций более высокого порядка. Неужели это правда невозможно в текущем (4.2) GLSL ? Или я упустил какой-то хитрый трюк ?

Общий пример того, чего я пытаюсь достичь:

int f(someType f2, int i) {
    return f2(i);
}
1 5

1 ответ:

Я ищу способ использовать функцию в качестве аргумента для другой функции в GLSL.

Короткий ответ: вы не можете.

Самая близкая вещь к этому виду функциональности, которую вы получите в GLSL, - этошейдерные подпрограммы . И это позволяет только внешнему API OpenGL выбирать, какую подпрограмму использовать, а не сам шейдер.

Поэтому просто сделайте заявление switch/case и покончите с этим.