0.glsl中语句以'分;号'结尾 否则会编译错误!

 

1.glsl中整数与浮点数运算会导致编译错误

vec2 p = -1 + 2 * v_texCoord;    //错误
vec2 p = -1.0 + 2.0 * v_texCoord;  //正确
 
2.glsl中没有使用过的变量会在编译阶段被丢弃
假如声明了一个
uniform float time;
若time并没有使用,编译阶段会把这个变量去掉
因此若程序中再去找time变量会找不到
glProgram_state.setUniformFloat("time", this.time);
//cocos2d: warning: Uniform not found: time
 
3.安卓手机gpu计算遇到大浮点数精度明显降低
如time传入之后,当time大于100.0时各种计算明显精度不粗
导致纹理采样卡顿
一般传入shader中的数字最好是小数
 
4.gl_FragCoord理解
https://blog.csdn.net/jinghouxiang/article/details/50751125
 
5.精度
在部分安卓手机(小米)上
因为浮点数精度不加会产生异常显示问题
比如计算距离distance/三角函数运算等等
可以把mediump改为highp
#ifdef GL_ES
//在小米等机型mediump会导致精度不足!显示异常
//precision mediump float;
precision highp float;
#endif
 
水波纹shader相关参考
http://forum.cocos.com/t/shader-creator-cocos2dx/49505
http://gad.qq.com/article/detail/20518
http://www.cocoachina.com/bbs/read.php?tid=1693873
https://blog.csdn.net/wuyangzu01/article/details/50503676
 
https://www.shadertoy.com/view/MsBSz1
https://blog.csdn.net/chenxizhibi/article/details/51291930
https://blog.csdn.net/yuanhong2910/article/details/18766385
https://blog.csdn.net/tkokof1/article/details/40819225
https://blog.csdn.net/tkokof1/article/details/41946337
 
水波特效思路
1.获取点击位置,在fsh中获取每个像素与点击位置的距离
2.根据这个距离处理采样偏移或者构建法线,形成环形波面效果
3.推进波面移动,控制波面衰减
4.多重波面重叠效果