2012-10-05 118 views
2

我想编出“垃圾”着色器,在一些垃圾代码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会标记错误?如何获得有关着色器编译状态的错误信息?

回答

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