2012-10-05 140 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(被檢測),則必須調用該對象(着色器程序,渲染緩衝區等)特定的錯誤查詢功能。