检查片段着色器中是否加载了webgl纹理

时间:2016-02-02 10:53:04

标签: javascript textures webgl

我正在编写一个带有纹理的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>

但当然这没有意义,因为纹理可能是黑色的。

任何人都可以帮助我吗?如何检查我的纹理图像是否已经加载到片段着色器中?

2 个答案:

答案 0 :(得分:3)

你无法在WebGL中真正检查它。

解决方案:

  1. 在加载纹理之前不要渲染

  2. 使用1x1像素纹理开始,将其填入图像 一旦它加载。 See this answer

  3. 将更多信息传递给着色器,如uniform bool textureLoaded。 我,我总是选择#2,因为这意味着应用程序立即运行,并在下载时填充纹理。

答案 1 :(得分:1)

我会提供新的制服,它将存储数据是否加载纹理。

或者你可以编写2个带/不带纹理的着色器,并在渲染之前选择合适的着色器。