【发布时间】:2014-12-19 21:29:24
【问题描述】:
我开始使用 Android (5.0.1) 上的 OpenGL ES2.0,API 级别 19。我应该在哪里存储着色器代码?第一个示例将着色器直接编码为字符串。
我想将着色器代码放在一个单独的文件中以提高可用性。存储和加载顶点和片段着色器的最佳做法是什么?
【问题讨论】:
标签: android opengl-es opengl-es-2.0 shader
我开始使用 Android (5.0.1) 上的 OpenGL ES2.0,API 级别 19。我应该在哪里存储着色器代码?第一个示例将着色器直接编码为字符串。
我想将着色器代码放在一个单独的文件中以提高可用性。存储和加载顶点和片段着色器的最佳做法是什么?
【问题讨论】:
标签: android opengl-es opengl-es-2.0 shader
有两个主要选项:
将它们作为文本文件存储在项目的assets 文件夹中。加载着色器:
getAssets() 方法获取AssetManager。AssetManager 上调用open(),传入着色器的文件名。这会给你一个InputStream。InputStream 读取着色器代码,并将其存储在String 中。close()InputStream。将它们存储在项目的res/raw 文件夹中。加载着色器:
getResources() 方法获取Resources。Resources 上调用openRawResource(),传入资源ID (R.raw.<name>)。这会给你一个InputStream。我不认为有一个重要的理由偏爱其中一个。主要区别在于您使用文件名来访问资产,而您使用自动分配的资源 ID 来访问资源。您更喜欢哪个是您的偏好问题。
【讨论】:
shadername_v 或 shadername_f,具体取决于它是顶点着色器还是片段着色器
喂!
如果有人在打开 res/raw 文件夹中扩展名为 .glsl 的文件时遇到问题,请执行以下操作:
1)打开File > Settings
2)在 inpit 行写File types
3)找到并选择OpenGL Shading Language(检查是否安装了GLSL Support插件)
4)添加注册模式*.glsl通配符
5)Apply和OK
【讨论】: