1. 不要用隐式类型转换
例子1:
int i = 5; // 没问题 float r = i * 0.05; // 有问题
例子2:
float a = 0; // 定义和赋值float不能不加".0"
以上两个例子在OpenGL上没任何问题,但在移动端测试表明,在OpenGL es上会编译失败。
2. 不能用循环,for和while都不能
GLSL用for和while循环在OpenGL上运行或许没问题,在大多数手机上或许也没问题,但就是在某些手机上(比如小米4)会直接崩溃,所以建议还是不要用。在我的描边shader里,一开始也是用循环的,但后来就是由于在小米4上崩溃,所以才意识到不能用循环,这是一个坑。
3. 不能用%,用mod(x,y)
GLSL里面没有C语言的%,用mod函数代替。
4. 如果用引擎3.x版本的STRINGIFY方法,记得要在#ifdef和#endif的前后加\n(见ccShaders.cpp)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。