7

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?

1 Answer 1

15

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.

Sign up to request clarification or add additional context in comments.

2 Comments

Just a quick reminder that this answer got a dead link! Please fix.
In my case i get true but still not passing ` if (gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) `

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.