通常在android里编写openGl代码的方式是创建一个类,类里面用硬编码的形式引入两个shader,如下图:
这里把glsl语言通过string字符串的形式定义在类里,虽然便于管理,但是不利于阅读和编写
那么有没有比较优雅的解决方案呢?
首先在assets里面定义一个glsl的类,glsl需要引入插件才能识别
然后在里面编写gl代码
添加引用:
//引入okio
fun getAsset(ctx: Context?, path: String): String {
val sb = StringBuilder()
ctx?.assets?.open(path)?.source()?.buffer()?.let {
while (!it.exhausted()) {
sb.append(it.readUtf8Line())
sb.append("\n")
}
return sb.toString()
}
return ""
}
最后使用:
getAsset获取的就是string的内容
也可以把文件放入raw文件夹,并引入
implementation 'com.blankj:utilcodex:1.31.0'
调用
ResourceUtils.readRaw2String(R.raw.***)