2010-02-26 9 views

ответ

19

Вы можете сделать это, например. выполняя вызовы функций из основной точки входа в функции, реализованные в различных шейдерных объектах.

main() { 
    callToShaderObject1() 
    callToShaderObject2() 
} 

каждой из этих функций callToShaderObject могут жить в разных объектах шейдерных, но все объекты должны быть установлены и связаны в той же программе, прежде чем он может быть использован.

+0

Из-за любопытства, зачем вы это делаете, а не просто выполняете все функции в рассматриваемом флеш-шейдере? Это значит, что код может использоваться совместно с другими шейдерными программами без необходимости дублирования? –

+0

@ Ник: Я не видел, чтобы это использовало меня. Я был удивлен, когда впервые прочитал спецификацию о том, как создавать шейдерные программы из шейдерных объектов, поэтому я знаю, что вы это делаете. Он был построен из стандартной модели компиляции ... – Bahbar

+2

Обновление: Я видел это в использовании сейчас, изучая модифицированные шейдеры MineCraft. В этом случае это было очень полезно, поскольку в каждом шейдере есть много вариантов, которые могут быть включены и выключены, с различными эффектами, действующими в сочетании с другими другими. В подобном сценарии и при участии нескольких авторов становится намного более полезным разделять функции на отдельные файлы. –

4

Они не могут работать одновременно, но вы можете использовать разные шейдеры для разных геометрий или визуализировать в несколько проходов с использованием разных шейдеров.

+1

Для этого потребуется другая программа? Значит, для каждого прохода нужна другая программа? Как и в, я мог бы иметь вершинный и фрагментарный шейдер в одной программе (это один проход?), А затем иметь вершинный и фрагментарный шейдер в другой программе (второй проход?)? Могу ли я просто изменить glUseProgram(), когда мне это нравится? Так что я, по сути, дважды снимаю сцену ...? – Harry

+1

Точно верно. Точно так же, как многопроходный рендеринг в фиксированном конвейере, но вместо изменения параметров openGL между проходами вы загружаете разные программы. –