我正在编写一个带有纹理的webgl程序。
只要未加载图像,texture2D函数就会返回vec4(0.0,0.0,0.0,1.0)。所以所有物体都是黑色的。
所以我想检查一下,如果我的sampler2D可用。
我已经尝试过了:
<script id="shader-fs" type="x-shader/x-fragment">
precision mediump float;
varying vec2 vTextureCoord;
uniform sampler2D uSampler;
void main(void) {
vec4 color = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
if(color.r == 0.0 && color.g == 0.0 && color.b == 0.0)
color = vec4(1.0, 1.0, 1.0, 1.0);
gl_FragColor = color;
}
</script>
但当然这没有意义,因为纹理可能是黑色的。
任何人都可以帮助我吗?如何检查我的纹理图像是否已经加载到片段着色器中?
答案 0 :(得分:3)
你无法在WebGL中真正检查它。
解决方案:
在加载纹理之前不要渲染
使用1x1像素纹理开始,将其填入图像 一旦它加载。 See this answer
将更多信息传递给着色器,如uniform bool textureLoaded
。
我,我总是选择#2,因为这意味着应用程序立即运行,并在下载时填充纹理。
答案 1 :(得分:1)
我会提供新的制服,它将存储数据是否加载纹理。
或者你可以编写2个带/不带纹理的着色器,并在渲染之前选择合适的着色器。