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)
原文链接:https://www.f2er.com/cocos2dx/343462.html