#version 320 es precision highp float; // 从顶点着色器输入 in vec2 vTexCoord; in vec4 vColor; in vec4 vTintColor; in float vOpacity; // 纹理采样器 uniform sampler2D uTexture; // 输出颜色 out vec4 fragColor; /** * @brief 片段着色器入口 * * 采样纹理并与顶点颜色、色调和透明度混合 */ void main() { // 采样纹理 vec4 texColor = texture(uTexture, vTexCoord); // 如果纹理采样结果是黑色或透明,使用白色作为默认值 if (texColor.rgb == vec3(0.0) || texColor.a < 0.01) { texColor = vec4(1.0, 1.0, 1.0, 1.0); } // 混合:纹理 * 顶点颜色 * 色调 fragColor = texColor * vColor * vTintColor; // 应用透明度 fragColor.a *= vOpacity; // Alpha 测试:丢弃几乎透明的像素 if (fragColor.a < 0.01) { discard; } }