在Android应用中存储着色器代码的位置

anh*_*ppe 8 shader android opengl-es opengl-es-2.0

我从Android(5.0.1),API级别19开始使用OpenGL ES2.0.我应该在哪里存储着色器代码?第一个示例将着色器直接编码为字符串.

我想将着色器代码放在一个单独的文件中以获得更好的可用性.存储和加载顶点和片段着色器的最佳实践是什么?

Ret*_*adi 11

有两个主要选择:

  • 将它们作为文本文件存储在assets项目的文件夹中.要加载着色器:

    1. 获取上下文AssetManagergetAssets()方法.
    2. 打电话open()AssetManager,通过在着色器的文件名.这给你一个InputStream.
    3. 从中读取着色器代码InputStream,并将其存储在a中String.
    4. 打电话close()InputStream.
  • 将它们存储在res/raw项目的文件夹中.要加载着色器:

    1. 获取上下文ResourcesgetResources()方法.
    2. 打电话openRawResource()Resources,传递的资源ID( R.raw.<name>).这给你一个InputStream.
    3. (与上述相同)
    4. (与上述相同)

我不相信有一个很大的理由偏爱一个而不是另一个.主要区别在于您使用文件名访问资产,而使用自动分配的资源ID作为资源.这是一个偏好的问题,你更喜欢哪一个.

  • 如果您使用“ .fs”文件扩展名,Android会将其解释为Renderscript过滤器脚本,并为您提供一些语法高亮显示。 (2认同)