Связать исходный код шейдера с приложением?

Мне просто интересно, как связать мои исходные файлы шейдера GLSL (для OpenGL ES (iOs)/OpenGL с GLUT (Mac/Windows)) с моим приложением. Как чистые текстовые файлы, они могут быть легко изменены каждым пользователем моего программного обеспечения, и я боюсь неопределенного поведения... В iOS я просто использую XCodes «Копировать ресурсы пакета» для своих шейдеров (и затем извлекаю их из пакета приложений). ) - есть ли аналогичная возможность с Visual Studio?

Или есть даже лучший кросс-платформенный способ сделать это?


person Constantin    schedule 04.05.2011    source источник


Ответы (2)


Шейдеры GLSL являются чистыми текстовыми файлами (или текстовыми фрагментами, как вам угодно). Нет никакого способа (кроме цифровой подписи ваших шейдеров и отказа от запуска, если подпись не совпадает) предотвратить банальное изменение пользователем ваших шейдеров в текстовом редакторе. (Конечно, вы можете сделать их нечитаемыми, закодировав их с помощью rot13 или поместив их все в файл .zip и переименовав файл .zip во что-то другое, это не помешает тому, кто решит найти ваши шейдеры, сделать это, но это, вероятно, отпугнет 90% обычных пользователей.)

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

В последних версиях OpenGL есть бинарное расширение шейдера, но оно не предназначено для решения вашей проблемы. Он просто предназначен как механизм кэширования для ускорения времени компиляции/связывания при последующих запусках. Он не подходит для распространения «двоичных файлов шейдеров».

person Damon    schedule 04.05.2011

Просто чтобы вы знали, даже в OSX шейдеры находятся в «чистом тексте», пакет приложений представляет собой обычный каталог, который включает папку Resource/, в которой размещены ваши шейдеры.

person user537011    schedule 11.05.2011