Intereting Posts
IDEA 11 adb Ошибка ввода-вывода при попытке подключить отладчик, когда открываются 2 окна IDEA Android получает друзей Facebook, у которых загружено приложение AppView.addJavascriptInterface () не работает с API 17 Использование элемента XML <merge> XML в корневом каталоге для макета активности Приложение не в результатах поиска в Google Play Как проверить, существует ли файл SharedPreferences Может ли фрагмент Android накладываться на активность PhoneGap? Отключить пинч / зум в браузере Android 2.1 на устройствах HTC Накладка кнопки не работает без фона CollapsingToolbarLayout: пользовательский контентScrim похож на Facebook Фрагмент не вызывает onSaveInstanceState при прокрутке ViewPager? Android.support.v7.widget.AppCompatTextView не может быть добавлен в файл android.widget.RelativeLayout Как получить отпечаток MD5 от Mavericks OnActivityResult () имеет данные Intent как null после завершения действия Android: повторное использование фрагментов ViewPager & FragmentPagerAdapter

Где хранить шейдерный код в приложении для 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. (Как указано выше)

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