Чи слід розповсюджувати шейдери у складеному вигляді чи у простому тексті?


13

Маючи програму, яка використовує шейдери, написані в GLSL, яка найкраща стратегія для розповсюдження в реальному світі та для настільних ПК та мобільних пристроїв?

Я маю на меті поширити це у двійковій формі або як звичайний серіалізований текст, я б хотів гарну пропозицію щодо цього.

Відповіді:


15

Основне обгрунтування використання двійкових шейдерів - це якщо компіляція шейдерів тексту надто велика навантаження для вашого цільового пристрою. Бінарні шейдери GLSL не мають стандартизованого формату, тому вам знадобляться різні для кожного GPU / драйвера, який ви плануєте підтримувати. Я рекомендую вам поширити шейдери у вихідному вигляді, а потім на першому запуску кешуйте їх у бінарну форму та згодом завантажуйте звідти. Потім я знову спробую, чи справді у вас є вузьке місце для ефективності, щоб виправдати використання двійкових файлів взагалі.

Одне, що слід врахувати, - це також офлайн-оптимізатор шейдерних текстів, який може мати великий ефект із шаленими компіляторами мобільних шейдерів.


Я насправді здивуюсь, якби ви могли знайти будь-який пристрій, де компіляція шейдерів є вузьким місцем. Кількість коду, навіть у великих шейдерах, є тривіальною кількістю коду з точки зору компіляції.
edA-qa mort-ora-y

1
Великі двигуни там зазвичай компілюють шейдери в автономному режимі та / або кешують їх під час першого запуску, як пропонує Tapio. Можливо, є тривіальна кількість коду на шейдер, але їх можна мати дуже багато .
Лоран Кувіду

тож мені доведеться придбати випадкову відеокартку ATI та іншу випадкову від Nvidia, скласти свої шейдери та розповсюдити лише скомпільовану версію? Як я можу перевірити під час виконання, яка марка цільової відеокарти? Для цього є щось надійне?
user827992

1
@ user827992 Бінарний формат може бути різним для різних поколінь GPU / драйверів, навіть якщо постачальник однаковий. І не забувайте, що тут також багато процесорних процесорів Intel, не кажучи вже про всі мобільні, такі як Qualcomm та PowerVR. Отже ще раз: я пропоную вам не поширювати складені шейдери, а краще кешувати їх під час першого запуску на пристрої користувача. Що стосується виявлення GPU, ви можете спробувати проаналізувати рядки GL_VENDOR, GL_VERSION та GL_RENDERER, утворюючи glGetString (), але їх формат змінюється від постачальника до постачальника.
Тапіо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.