В настоящее время у меня есть два шейдера, которые предназначены для обработки объектов одного и того же типа, но производят разные выходные данные: один цвет для экрана, другую информацию о выборе.Напишите в некоторые фрагменты, но не другие
Выход вытяжки шейдера:
layout(location = 0) out vec4 outColor;
Вывод выбор шейдера:
layout(location = 0) out vec4 selectionInfo0;
layout(location = 1) out ivec4 selectionInfo1;
Я рассматриваю объединение шейдеров вместе (эти два и другие в моем приложении) для ясности и простоты обслуживания (зачем редактировать два шейдера, когда вы можете их редактировать?).
Выход объединенного шейдера:
layout(location = 0) out vec4 outColor;
layout(location = 1) out vec4 selectionInfo0;
layout(location = 2) out ivec4 selectionInfo1;
Согласно этой схеме, я бы установить форму, которая определяет, какие должны быть записаны фрагменты.
Могу ли я написать некоторые фрагменты, а не другие?
void main()
{
if(Mode == 1){
outColor = vec4(1, 0, 0, 1);
}
else {
selectionInfo0 = vec4(0.1, 0.2, 0.3, 0.4);
selectionInfo1 = ivec4(1, 2, 3, 4);
}
}
Это законный подход? Есть ли что-то, о чем я должен беспокоиться?
Посмотрел, что вы отредактировали, и этот подход в порядке. * но *, по-прежнему взгляните на то, что я упомянул о ветвлении в шейдерном коде. Это медленный процесс, поэтому, по крайней мере, осознавайте беспокойство о скорости, если вы начнете добавлять дополнительные операторы if, так как вы хотите получить решение «один-шейдер для всех» – WearyWanderer
Вставка упоминания ветви здесь, потому что мой ответ больше не был релевантным после редактирования .- "(зачем редактировать два шейдера, когда вы можете редактировать их?)« не всегда хорошее мышление. Здесь хорошо, но вам не нужно иметь одну огромную программу шейдеров для выполнения всех ваших различных операций. Ветвление в шейдерах является очень неэффективным и медленным, и его обычно следует избегать, даже если это означает создание двух отдельных шейдеров для двух различных форм функциональности. – WearyWanderer
[Здесь] (http://stackoverflow.com/questions/30581719/opengl-glsl-uniform-branching-vs-multiple-shaders) соответствующий вопрос по этому вопросу. – AbleArcher