Dónde almacenar código de sombreado en la aplicación para Android
Estoy empezando con OpenGL ES2.0 en Android (5.0.1), nivel API 19. ¿Dónde debo almacenar el código de sombreado? El primer ejemplo codifica el sombreado directamente como una cadena.
Me gustaría tener el código de sombreado en un archivo separado para una mejor usabilidad. ¿Cuál es la mejor práctica para almacenar y cargar los sombreadores de vértices y fragmentos?
- El algoritmo de ruido falla en Samsung Galaxy SIII (GLES)
- Cómo pasar la matriz int en el fragmento de fragmento de Android OpenGl
- OpenGL ES 2.0 múltiples programas o múltiples Shaders o qué? ¿Como funciona?
- Utilizar glVertexAttribPointer y glDrawElements para extraer de un buffer de vértice empaquetado
- Intercambiar píxeles de MainTex con otras texturas a través de la superficie Shader (Unity)
- Android: TextView dañado usando .setShader ()
- Pasar datos adicionales para fragmentar el shader a través de VBO - DynamicSpriteBatch
- Android glShaderBinary
- Simulación de swaps de paletas con Shaders OpenGL (en LibGDX)
- Creación de shaders OpenGL en NativeActivity
- ¿Se descarta mal el rendimiento del programa en OpenGL?
- Cómo utilizar la cámara con Android OpenGL ES para trabajar?
- Cómo pasar los datos correctos a un programa de shader OpenGL-ES 2.0
Hay dos opciones principales:
-
Guárdelos como archivos de texto en la carpeta de
assets
de su proyecto. Para cargar el sombreado:- Obtenga
AssetManager
con el métodogetAssets()
del contexto. - Llame a
open()
enAssetManager
, pasando el nombre de archivo del shader. Esto le da unInputStream
. - Lea el código de sombreado del
InputStream
y guárdelo en unaString
. - Llame a
close()
en elInputStream
.
- Obtenga
-
Guárdelos en la carpeta
res/raw
de su proyecto. Para cargar el sombreado:- Obtenga los
Resources
con el métodogetResources()
del contexto. - Llame a
openRawResource()
en losResources
, pasando el identificador de recurso (R.raw.<name>
). Esto le da unInputStream
. - (lo mismo que arriba)
- (lo mismo que arriba)
- Obtenga los
No creo que haya una gran razón para preferir uno sobre el otro. La principal diferencia es que utiliza el nombre de archivo para acceder a los recursos, mientras utiliza el identificador de recursos asignado automáticamente para los recursos. Es una cuestión de preferencia que te gusta más.
- Error: abrir error: ENOENT (No hay ningún archivo ni directorio)
- ¿Cómo crear un Siri como la aplicación para Android?