如何在WebGL着色器中使用console.log输出?

18

我正在尝试理解如何在使用GLSL编写的webgl着色器中模拟console.log。虽然很容易获取错误消息,但我不知道如何打印自定义消息。

基本上,我想在浏览器的控制台中打印信息:

<script id="shader-fs1" type="x-shader/x-fragment">
  void main(void) 
  { 
    //console.log doesn't work here since it's GLSL not javascript
    gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); 
  } 
</script>

有什么建议吗?
3个回答

10

编译着色器后,您可以执行以下操作:

if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
    alert(gl.getShaderInfoLog(shader));
}

而且它将在编译期间向您显示任何错误消息。 GLSL无法以任何形式将数据发送回程序,除了帧缓冲区/纹理之外,因此您只能通过检查输出颜色来检查正在发生的情况。 正如Michael所指出的那样,WebGL检查器可能是有用的,但对于着色器而言并不那么重要,而是用于调试WebGL应用程序。


这应该是被接受的答案。我已经通过这个找到了一个令人讨厌的着色器错误,非常感谢Abstract。 - Daniel Cantarin

4

3

目前在WebGL中,除了通过其预定的结果(屏幕/图像颜色)外,没有已知的从GLSL输出数据的方法。 除非您已经这样做了,否则我建议您查看Learning WebGL,同时kick.js对您也可能有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接