Где хранить шейдерный код в приложении для Android

Я начинаю с OpenGL ES2.0 на Android (5.0.1), API уровня 19. Где я должен хранить шейдерный код? Первый пример кодирует шейдер непосредственно в виде строки.

Я хотел бы иметь шейдерный код в отдельном файле для лучшего удобства использования. Какова наилучшая практика для хранения и загрузки шейдеров вершин и фрагментов?

Существует два основных варианта:

  • Храните их как текстовые файлы в папке с assets вашего проекта. Чтобы загрузить шейдер:

    1. Получите AssetManager с помощью getAssets() контекста.
    2. Вызовите open() в AssetManager , передав имя файла шейдера. Это дает вам InputStream .
    3. Прочитайте шейдерный код из InputStream и сохраните его в String .
    4. Вызов close() в InputStream .
  • Храните их в папке res/raw вашего проекта. Чтобы загрузить шейдер:

    1. Получите Resources с помощью getResources() контекста.
    2. Вызовите openRawResource() в Resources , передав идентификатор ресурса ( R.raw.<name> ). Это дает вам InputStream .
    3. (Как указано выше)
    4. (Как указано выше)

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