全部专题

Shader 里有 mainImage,为什么画布仍是黑的?

沿数据传递顺序缩小黑屏原因:先输出纯红色,确认着色器已链接、顶点覆盖画布且绘制生效,再显示 UV、加入时间,最后接入纹理。每次只增加一个输入,首次出错的步骤就能指出排查方向。

先固定问题

黑屏需要按数据路径缩小范围。先返回固定红色,证明程序链接、顶点覆盖与 draw 调用正常;再显示 UV;之后引入时间和纹理。每一步都只加一个输入,这样第一次变黑的位置就是最有价值的证据。

关键代码

// Stage 1: gl_FragColor=vec4(1.0,0.0,0.0,1.0);
// Stage 2:
vec2 uv=gl_FragCoord.xy/max(u_resolution,vec2(1.0));
gl_FragColor=vec4(uv,0.0,1.0);
// Stage 3: animate one channel with sin(u_time).
// Stage 4: replace the color with the texture lookup.

按顺序验证

保存编译日志,区分编译失败与“编译成功但输出为零”。再检查 mainImage 是否有 main 包装、uniform 名是否一致、分辨率是否为零、纹理是否加载、是否遗漏 Buffer A。

适用范围和常见错误

不要一开始同时换相机、贴图和材质。先保留一个已知可见的四边形,避免把多个变量混在同一轮排查里。

继续实验

参考

官方文档

运行相关示例