You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何该GLSL片段着色器绘制平面时崩溃但运行在球体上正常?

问题复现代码
precision highp float;

uniform sampler2D uTexture;
varying vec2 vCoordinate;
uniform float uAlpha;
varying vec4 vColor;

void main(){
    vec4 color=texture2D(uTexture,vCoordinate);
    color.a *= uAlpha;
    color.r = 1.0;
    color.g = 1.0;
    color.b = 1.0;
    color.a = 1.0;
    gl_FragColor=color;
//    gl_FragColor = vec4(1.0,0.0,0.0,1.0);
}
可能成因及排查步骤
  • 纹理采样未定义行为触发崩溃
    GLSL 不会因为后续代码覆盖了采样结果就跳过texture2D的执行逻辑。球体绘制时通常会保证vCoordinate的取值严格落在[0.0, 1.0]区间,而平面场景如果没有做纹理坐标裁剪,vCoordinate超出合法范围的同时,uTexture没有设置匹配的边缘采样模式(重复/拉伸/裁剪),就会触发GPU采样异常。可先注释掉采样相关的两行代码,直接赋值vec4 color = vec4(1.0);验证是否和采样逻辑相关。
  • Uniform变量未正常传值
    检查平面绘制流程中是否给uTexture、uAlpha两个uniform变量做了合法赋值:如果uTexture绑定的是无效纹理单元,或者uAlpha没有传入有效值,就会触发运行时异常。球体绘制流程能正常运行,大概率是这两个参数在球体场景下有正常传值,平面场景漏了传值逻辑。
  • 高精度浮点兼容性问题
    开头声明的precision highp float在部分旧款移动GPU、桌面集成显卡上的2D绘制管线存在兼容性缺陷,而3D球体绘制管线默认做了精度适配。可将highp替换为mediump验证是否是精度声明导致的兼容问题。
  • 纹理坐标插值异常
    检查平面的顶点着色器逻辑,以及平面顶点的坐标、纹理坐标赋值是否正确:如果平面顶点存在共面重合、顶点顺序错误、纹理坐标赋值为NaN的情况,会导致插值后的vCoordinate为非法值,采样非法纹理坐标直接触发GPU崩溃。球体的顶点数据是规整生成的,插值结果始终合法,所以不会触发该问题。

内容的提问来源于stack exchange,提问作者chengfeng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:15:02