着色器编译错误

时间:2012-10-05 22:52:21

标签: javascript google-chrome webgl

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

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_ERRORtrue,尽管要求WebGL编译一些垃圾。

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

1 个答案:

答案 0 :(得分:7)

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

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()检测到您必须调用对象(着色器,程序,渲染缓冲区等)特定的错误查询函数。