Лучшее решение, которое я видел до сих пор, учитывая тот факт, что шейдеры обычно являются очень маленькими программами, - это встраивать их в ваш код так, как вы только что сказали.
Это довольно безопасно.
Учтите, что, если кто-то захочет взять ваши шейдеры, сделает это путем выгрузки его из графического процессора, очевидно, это намного сложнее, но это можно сделать (говоря об обратном инжиниринге).
Шифрование является опцией, но оно защищает только локальное хранилище шейдеров, я все еще могу сбросить память вашей программы сразу после расшифровки.
И последнее, но не менее важное: не очень удобно предварительно скомпилировать ваши шейдеры, и это тем более справедливо, если учесть платформу, на которой вы работаете, где существует большое семейство реализаций GPUS и драйверов.
Возвращаясь к вашему другому вопросу о предварительно скомпилированных шейдерах, есть очень хорошее объяснение на странице 350 OpenGL Gold Book (Руководство по программированию OpenGL ES 2.0), где объясняется, почему вы не должны этого делать.
Одна из причин заключается в том, что производители устройств могут хранить бинарные шейдеры так, как они предпочитают.
Надеюсь, это было полезно.
Blockquote