Randomblue
Randomblue

Reputation: 116433

Shader compile errors

I am trying to compile a "garbage" shader, feeding in some garbage code to WebGL (see here for a fiddle):

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);

Surprisingly, gl.getError() === gl.NO_ERROR is true despite asking WebGL to compile some garbage.

Why doesn't getError flag an error? How can I get error information regarding the compilation status of my shaders?

Upvotes: 7

Views: 6213

Answers (1)

Cutch
Cutch

Reputation: 3575

gl.getError only returns errors for the OpenGL pipeline. A shader failing to compile does not cause an error in the pipeline. You can read about gl.getError here. You can query the status of shader like so:

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);

Similarly, shader program linking errors do not invalidate the OpenGL pipeline and can't be detected with gl.getError() you must call the object (shader, program, render buffer, etc) specific error query functions.

Upvotes: 15

Related Questions