Вопрос

У меня есть проект, который использует 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 */ }

Это единственный статус компиляции, который вы получаете;я не нашел ни одного переносимого способа определить, есть ли у вас предупреждения.(Журнал компиляции может быть полон всего, что реализация хочет поместить в него, включая уведомление об успехе.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top