7

我正在尝试编译一个“垃圾”着色器,向 WebGL 提供一些垃圾代码(请参阅此处获取小提琴):

gl = $('canvas')[0].getContext('experimental-webgl');

source = 'garbage12398sv;aa[]|\[12';

shader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(shader, source);
gl.compileShader(shader);

console.log(gl.getError() === gl.NO_ERROR);

令人惊讶的是,gl.getError() === gl.NO_ERROR尽管true要求 WebGL 编译一些垃圾。

为什么不getError标记错误?如何获取有关着色器编译状态的错误信息?

4

1 回答 1

14

gl.getError 仅返回 OpenGL 管道的错误。未能编译的着色器不会导致管道中的错误。您可以在此处阅读有关 gl.getError的信息。您可以像这样查询着色器的状态:

var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
console.log('Shader compiled successfully: ' + compiled);
var compilationLog = gl.getShaderInfoLog(shader);
console.log('Shader compiler log: ' + compilationLog);

同样,着色器程序链接错误不会使 OpenGL 管道无效,并且无法使用 gl.getError() 检测到,您必须调用对象(着色器、程序、渲染缓冲区等)特定的错误查询函数。

于 2012-10-05T23:33:42.440 回答