2012-10-05 4 views
2

Я пытаюсь скомпилировать «мусора» шейдер, питание в некоторых мусорный код для WebGL (см here для скрипки):Shader ошибки компиляции

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_ERROR является true, несмотря просят 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() вы должны вызвать объект (шейдер, программу , буфер визуализации и т. д.) конкретные функции запроса ошибок.

Смежные вопросы