OpenGL дозволяє ділитися одним шейдером між кількома програмами. Окрім економії невеликої кількості пам’яті та рукоятки шейдера, чи є якісь переваги для роботи GPU для цього?
OpenGL дозволяє ділитися одним шейдером між кількома програмами. Окрім економії невеликої кількості пам’яті та рукоятки шейдера, чи є якісь переваги для роботи GPU для цього?
Відповіді:
Я сумніваюся, що є переваги продуктивності GPU.
Якщо, наприклад, ви прив'язуєте загальний шейдер до програми, ефективна реалізація повинна мати змогу видаляти невикористані атрибути між цим шейдером та іншими шейдерами в цій програмі і, можливо, навіть спростити логіку шейдера в результаті. Звичайно, це не є реальною вигодою від налаштованої вручну комбінації шейдерів, але це допомагає керувати складністю / комбінаторикою та, можливо, зменшити кількість компіляцій, які повинен робити драйвер.
Однак можуть бути недоліки цього в плані неефективних реалізацій драйверів-компіляторів. А ще там є деякі, перевірте: http://aras-p.info/blog/2010/09/29/glsl-optimizer/ лише прості прості речі, які в деяких реалізаціях можуть помилитися.