2014-02-15 3 views
2

После связывания моей шейдерной программы я получаю GL_INVALID_OPERATION при вызове glGetUniformLocation. Документы говорят мне, что это означает, что моя шейдерная программа не существует или она не была успешно связана.glGetShaderInfoLog возвращает пустую строку, но программа shader не связана правильно

Но вызов glGetShaderInfoLog не возвращает никаких ошибок, он просто возвращает пустую строку (на OpenTK).

Как я могу узнать, что случилось?

+1

Не нужно ничего возвращать, хотя это было бы чрезвычайно полезно. Вы проверяете 'GL_LINK_STATUS' через' glGetProgramiv (...) '- это на самом деле правильный способ определить, правильно ли связана программа. Проверьте это значение после попытки соединения программы или вызова 'glValidateProgram (...)'. –

+0

Вызов 'glGetProgramiv' с' GL_LINK_STATUS' возвращает 'GL_FALSE'. Но это не очень помогает, я уже знал, что программа не была правильно связана. Все еще интересно, почему нет журнала. – cheeesus

ответ

1

Найдено. Причиной было несколько varying s и s uniform, что не указали прецизионный спецификатор:

varying vec4 vPosition; 

вместо

varying lowp vec4 vPosition; 

Это произошло на iPhone 5, а также в iPhone симулятор. Странно, что это не дает утверждение в журнале.

+2

В дополнение к компиляции есть второй журнал; 'glGetProgramInfoLog (...)'. Это даст вам журнал (для каждой программы) для ошибок/предупреждений компоновщика, другой журнал (per-shader) предназначен для компиляции ошибок/предупреждений. –

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