Невозможно получить сообщение об ошибке из glGetShaderInfoLog

Я пытаюсь создать простую программу OpenGL 3.2, которая состоит из шейдера с одним фрагментом, но, похоже, я не могу фактически скомпилировать шейдер. Я вполне уверен, что мой синтаксис шейдера правильный, но даже если это не так, я не могу получить сообщение об ошибке, используя glGetShaderInfoLog,

Я разработал короткую программу, которая показывает это в действии:

GLuint shader = glCreateShader(GL_FRAGMENT_SHADER);

const char *shaderData =
"#version 120\n""void main()\n""{\n""    gl_FragColor = gl_Color;\n""}\n";
glShaderSource(shader, 1, &shaderData, NULL);

GLint status;
glGetShaderiv(shader, GL_COMPILE_STATUS, &status);

if (status == GL_FALSE)
{
GLint infoLogLength;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &infoLogLength);

GLchar* strInfoLog = new GLchar[infoLogLength + 1];
glGetShaderInfoLog(shader, infoLogLength, NULL, strInfoLog);

fprintf(stderr, "Compilation error in shader %s: %s\n", this->name, strInfoLog);
delete[] strInfoLog;
}

Это приводит к сообщению:

Ошибка компиляции в шейдере Fragment Shader:

Кажется, проблема в том, что призыв к getShaderiv чтобы получить GL_INFO_LOG_LENGTH Значение возвращает 0 каждый раз, поэтому я выделяю пустую строку. Я пытался жестко запрограммировать это значение на 100, но я все еще ничего не получаю от getShaderInfoLog,

Моя задача здесь не в том, чтобы исправить шейдер (я могу сделать это сам, если он ошибается), а в том, чтобы получить отладочную информацию. Я знаю, что это можно сделать, потому что я использовал Shader Maker кратко разработать шейдеры, и я могу получить очень подробные сообщения отладки. Например:

ERROR: 0:11: 'undefined_variable' : syntax error syntax error

Если шейдерный маркер не имеет собственного внутреннего инструмента проверки, я уверен, что он должен использовать тот же метод, который я пытаюсь использовать. В Интернете я видел несколько примеров, в которых люди одинаково извлекают сообщение об ошибке для шейдера, поэтому я вполне уверен, что делаю это правильно.

Теперь я получаю предупреждение во время компиляции, которое потенциально может объяснить эту проблему:

#warning gl.h and gl3.h are both included. Compiler will not invoke errors if using removed OpenGL functionality.

После выполнения полнотекстового поиска я не могу найти нигде, где я звоню #include <OpenGL/gl.h>, так что я предполагаю, что этот заголовок включен одним из NSOpenGL* классы. Я вполне уверен, что в этой короткой программе я не использую удаленную функциональность, и у этой проблемы всего 5 обращений к Google, но я подумал, что в любом случае лучше упомянуть об этом.

4

Решение

Как отмечалось в предыдущем комментарии, glCompileShader звонок пропал.

9

Другие решения

Других решений пока нет …

Похожие вопросы
Добавить ответ
Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Нажимая кнопку «Отправить», я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности этого сайта.