Подробная компиляция шейдера GLSL на Intel
Вопрос
У меня есть проект, который использует GLSL-шейдеры.
Этот проект предназначен для того, чтобы ничего не печатать в стандартный вывод, если только что-то не идет не так или вы явно не включаете какой-либо дополнительный отладочный вывод.
Когда компиляция шейдера завершается неудачей, длина журнала, заданная glGetProgramInfoLog
равно > 0, и иногда, когда он завершает его > 0, и выдает compile предупреждения вместо этого.Когда у вас есть шейдер, который отлично компилируется, длина журнала равна <1...вот как это работает на моей карте NVidia на моем компьютере разработчика.
За свои грехи я также немного занимаюсь разработкой на ноутбуке со встроенной видеокартой Intel.Код работает нормально, но всякий раз, когда я выполняю компиляцию шейдера, журнал содержит:
"шейдер был успешно скомпилирован для запуска на аппаратном обеспечении"
Что очень раздражает, поскольку теперь у меня нет способа решить, должен ли я распечатать строку, кроме какого-то анализа строки, например:
strstr("successfully",log)
Надеюсь, понятно, почему это нежелательно.Как, если вообще, я могу определить, стоит ли распечатывать сообщение с помощью OpenGL api?
Редактировать:
Если я использую glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
тогда я не получаю предупреждений о компиляции, только ошибки.
Решение
Держи, ты идешь:
glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
if(!err) { /* now print out the error log */ }
Это единственный статус компиляции, который вы получаете;я не нашел ни одного переносимого способа определить, есть ли у вас предупреждения.(Журнал компиляции может быть полон всего, что реализация хочет поместить в него, включая уведомление об успехе.)