Я хотел бы иметь два пиксельных шейдера; первый делает одно, а затем следующий делает что-то еще. Возможно ли это, или я должен упаковать все в один шейдер?У вас есть несколько пиксельных (фрагментных) шейдеров в одной программе?
ответ
Вы можете сделать это, например. выполняя вызовы функций из основной точки входа в функции, реализованные в различных шейдерных объектах.
main() {
callToShaderObject1()
callToShaderObject2()
}
каждой из этих функций callToShaderObject могут жить в разных объектах шейдерных, но все объекты должны быть установлены и связаны в той же программе, прежде чем он может быть использован.
Они не могут работать одновременно, но вы можете использовать разные шейдеры для разных геометрий или визуализировать в несколько проходов с использованием разных шейдеров.
Для этого потребуется другая программа? Значит, для каждого прохода нужна другая программа? Как и в, я мог бы иметь вершинный и фрагментарный шейдер в одной программе (это один проход?), А затем иметь вершинный и фрагментарный шейдер в другой программе (второй проход?)? Могу ли я просто изменить glUseProgram(), когда мне это нравится? Так что я, по сути, дважды снимаю сцену ...? – Harry
Точно верно. Точно так же, как многопроходный рендеринг в фиксированном конвейере, но вместо изменения параметров openGL между проходами вы загружаете разные программы. –
Из-за любопытства, зачем вы это делаете, а не просто выполняете все функции в рассматриваемом флеш-шейдере? Это значит, что код может использоваться совместно с другими шейдерными программами без необходимости дублирования? –
@ Ник: Я не видел, чтобы это использовало меня. Я был удивлен, когда впервые прочитал спецификацию о том, как создавать шейдерные программы из шейдерных объектов, поэтому я знаю, что вы это делаете. Он был построен из стандартной модели компиляции ... – Bahbar
Обновление: Я видел это в использовании сейчас, изучая модифицированные шейдеры MineCraft. В этом случае это было очень полезно, поскольку в каждом шейдере есть много вариантов, которые могут быть включены и выключены, с различными эффектами, действующими в сочетании с другими другими. В подобном сценарии и при участии нескольких авторов становится намного более полезным разделять функции на отдельные файлы. –