我从Android(5.0.1),API级别19开始使用OpenGL ES2.0。我应该在哪里存储着色器代码?第一个示例将着色器直接编码为字符串。
我希望将着色器代码放在单独的文件中以获得更好的可用性。存储和加载顶点和片段着色器的最佳做法是什么?
答案 0 :(得分:11)
有两个主要选项:
将它们作为文本文件存储在项目的assets
文件夹中。要加载着色器:
AssetManager
方法获取getAssets()
。open()
上调用AssetManager
,传入着色器的文件名。这会为您提供InputStream
。InputStream
中的着色器代码,并将其存储在String
。close()
。{/ li>上的InputStream
将它们存储在项目的res/raw
文件夹中。要加载着色器:
Resources
方法获取getResources()
。openRawResource()
上调用Resources
,传入资源ID(R.raw.<name>
)。这会为您提供InputStream
。我不相信有一个很大的理由偏爱一个而不是另一个。主要区别在于您使用文件名访问资产,而使用自动分配的资源ID作为资源。这是一个你最喜欢的偏好问题。
答案 1 :(得分:1)
喂!
如果有人在打开.glsl
文件夹中扩展名为res/raw
的文件时遇到问题,请执行以下操作:
1)打开File
> Settings
2)在插入行中写File types
3)找到并选择OpenGL Shading Language
(检查是否安装了GLSL Support
插件)
4)添加注册模式*.glsl
通配符
5)Apply
和OK