OpenGL позволяет вам совместно использовать один и тот же шейдер между несколькими программами. Помимо экономии небольших объемов памяти и управления шейдерами, есть ли какие-либо преимущества для производительности на стороне GPU?
OpenGL позволяет вам совместно использовать один и тот же шейдер между несколькими программами. Помимо экономии небольших объемов памяти и управления шейдерами, есть ли какие-либо преимущества для производительности на стороне GPU?
Ответы:
Я сомневаюсь, что есть преимущество в производительности на GPU.
Например, когда вы привязываете общий шейдер к программе, эффективная реализация должна быть в состоянии удалить неиспользуемые атрибуты между этим шейдером и другими шейдерами в этой программе и, возможно, даже упростить логику шейдера в результате. Конечно, это не реальное преимущество по сравнению с настраиваемой вручную комбинацией шейдеров, но это помогает управлять сложностью / комбинаторикой и, возможно, уменьшить количество компиляций, которые должен выполнять драйвер.
Тем не менее, это может быть связано с недостатками реализации неэффективных драйверов и компиляторов. И есть некоторые, проверьте: http://aras-p.info/blog/2010/09/29/glsl-optimizer/ только для некоторых простых вещей, которые некоторые реализации могут ошибаться.