我写了一个很简单的着色器,来去掉透明背景 PNG 的黑底,来方便后续给这张 PNG 图片上色(见下方代码片元着色器里被注释掉的部分)。
刚发现下面这段代码在 blendState 中的配置,在电脑浏览器中完全失效了:
CCEffect %{
techniques:
- name: opaque
passes:
- vert: vs:vert
frag: fs:frag
blendState:
targets:
- blend: true
blendSrc: src_alpha
blendDst: one_minus_src_alpha
depthStencilState:
depthTest: false
depthWrite: false
}%
CCProgram vs %{
precision highp float;
#include <cc-global>
in vec3 a_position;
in vec2 a_texCoord;
out vec2 uv;
vec4 vert() {
vec4 pos = vec4(a_position, 1);
pos = cc_matViewProj * pos;
uv = a_texCoord;
return pos;
}
}%
CCProgram fs %{
precision highp float;
#include <sprite-texture>
in vec2 uv;
vec4 frag() {
// vec3 green = vec3(0.0, 1.0, 0.0);
vec4 color = texture(cc_spriteTexture, uv);
// color.rgb = mix(color.rgb, green, 0.8); // 使用内置的 GLSL 方法 mix 混合颜色
return color;
}
}%
如下图所示,Macbook 上的 Chrome 浏览器(Safari 浏览器也一样),都会莫名显示黑色底色:
留意在 Cocos Creator 编辑器中运行则完全正常(见上图右侧),仅电脑浏览器上有问题。
【重要】几天前电脑浏览器运行也是正常的,不知道为何今天重新运行出现这种异常(代码没有任何修改),有没有可能是苹果更新了 Webkit 内核带入了什么 bug?
更多信息:
- Creator 版本:3.8.6
- MacOS:15.5 (24F74)
- Chrome 版本 138.0.7204.93(正式版本) (arm64)
使用的 PNG 图片(打成 zip 压缩包):avatar_transparent.png.zip (41.1 KB)
另外我特意在手机(iPhone 13 Pro, iOS 18.5)的 Safari 浏览器试了下,发现没有黑色底色,但是会有不明显的白色高亮:
也希望你们能仔细看一下 iPhone 上的这个问题,因为 Cocos Creator 编辑器上没有这种奇怪的白色高亮,这张 PNG 我也仔细检查过了,它的底色就是 100% 透明的。


