写了一些shader,在windows上测试是正确的,在安卓手机上测试,有些机型显示是正常的,有些机型则直接闪退,查log发现是glProgram并没有正确创建出来。又试了下网易的一款模拟器,显卡渲染模式选择directx就会崩溃,而选择opengl就是正常的。查资料也没有查到究竟为什么,请问各位有什么处理经验吗?
对了 ,版本是cocos3.3
木有人吗
用的是真机还是模拟器?在哪里手机有问题?有对应的重现例子吗?另外 [quote=“165613676, post:2, topic:42972, full:true”]
版本是cocos3.3
[/quote]
这是什么版本?
版本是3.3.,。。。后面confounded:是论坛一个表情。。。不知道为什么没显示出来。。
真机和模拟器都使用过,真机小米MAX glProgram是初始化失败,其他的例如一加手机,华为没有出问题
模拟器也就网易这一个渲染模式出了问题,
,另外一个兼容模式下shader是正常的。
下面是错误日志,GLProgramState::init()的时候,这个glProgram值是空

#ifdef GL_ES
precision mediump float;
#endif
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
uniform float factor;
uniform float width;
uniform vec3 color;
uniform float offset;
void main()
{
vec4 texColor = texture2D(CC_Texture0, v_texCoord);
float distance = abs(v_texCoord[0]+v_texCoord[1]-offset)/1.414;
distance = 1.0-(1.0/width)*distance;
distance = max(distance, 0.0);
vec4 sample = vec4(0.0,0.0,0.0,0.0);
sample[0] = color[0]/255 * distance;
sample[1] = color[1]/255 * distance;
sample[2] = color[2]/255 * distance;
sample[3] = distance;
float alpha = sample[3]*texColor[3];
texColor[0] = texColor[0] + sample[0]*alpha*factor;
texColor[1] = texColor[1] + sample[1]*alpha*factor;
texColor[2] = texColor[2] + sample[2]*alpha*factor;
gl_FragColor = v_fragmentColor * texColor;
}
功能是比较简单的一个高亮斜条
如果不用你自己的shader,引擎内部的shader有问题吗?
官方shader我试了outline blur 和noisy 这三个,在小米MAX和极速模式下面表现都是正常的。
刚开始我查资料有人说是运算复杂可能导致这个情况,但是实际上noisy的运算比我这个麻烦得多。
上面我贴的这段shader我直接设置的为factor = 1.5, width=0.2,offset = 1,color = vec3(255,255,255)
然后我又拿灰度shader做测试,
#ifdef GL_ES
precision mediump float;
#endif
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
void main(void)
{
vec4 c = texture2D(CC_Texture0, v_texCoord);
gl_FragColor.xyz = vec3(0.2126c.r + 0.7152c.g + 0.0722*c.b);
gl_FragColor.w = c.w;
}
这种情况下是对的,在小米MAX和极速模式下表现正常,然而当我改成
vec4 c = texture2D(CC_Texture0, v_texCoord);
float scale = 6.0/10;
gl_FragColor.xyz = vec3(0.2126*c.r + 0.7152*c.g + 0.0722*c.b)*scale;
gl_FragColor.w = c.w;
在小米MAX和极速模式下就glProgram初始化失败了~但是却在部分机型和兼容模式下是表现正常的
好像发现问题了,似乎浮点格式必须要很严格,我写的6.0/10,我刚才改成6.0/10.0后就正常显示了
我第一段代码也是,改成全是浮点后就没问题了。
不知道这是shader本身就这样还是因为
小米MAX系统的原因?
这个设备上严格的格式,浮点必须加x.0
mac上如果这么写 会编译报错提示的。