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

时间:2014-12-19 21:29:25

标签: android opengl-es opengl-es-2.0 shader

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

我希望将着色器代码放在单独的文件中以获得更好的可用性。存储和加载顶点和片段着色器的最佳做法是什么?

2 个答案:

答案 0 :(得分:11)

有两个主要选项:

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

    1. 使用上下文的AssetManager方法获取getAssets()
    2. open()上调用AssetManager,传入着色器的文件名。这会为您提供InputStream
    3. 阅读InputStream中的着色器代码,并将其存储在String
    4. 致电close()。{/ li>上的InputStream
  • 将它们存储在项目的res/raw文件夹中。要加载着色器:

    1. 使用上下文的Resources方法获取getResources()
    2. openRawResource()上调用Resources,传入资源ID(R.raw.<name>)。这会为您提供InputStream
    3. (与上述相同)
    4. (与上述相同)

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

答案 1 :(得分:1)

喂! 如果有人在打开.glsl文件夹中扩展名为res/raw的文件时遇到问题,请执行以下操作: 1)打开File> Settings 2)在插入行中写File types 3)找到并选择OpenGL Shading Language(检查是否安装了GLSL Support插件) 4)添加注册模式*.glsl通配符 5)ApplyOK