Функции второго порядка в GLSL? - PullRequest
5 голосов
/ 29 февраля 2012

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

Типичный пример того, чего я пытаюсь достичь:

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

1 Ответ

4 голосов
/ 29 февраля 2012

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

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

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

Так что просто сделайте оператор switch/case и покончите с ним.

...