Ошибка недопустимой операции glUseProgramObjectARB

#c #opengl #sdl #glsl

#c #opengl #sdl #glsl

Вопрос:

Я получаю ошибку «недопустимая операция» при попытке использовать glUseProgramObjectARB и я понятия не имею, почему.

Я абсолютно уверен, что шейдерные программы загружаются правильно. Это показано на glGetInfoLogARB :

  • Вершинный шейдер был успешно скомпилирован для запуска на оборудовании.
  • Фрагмент шейдера был успешно скомпилирован для запуска на этом оборудовании.

До этой команды не было предыдущих ошибок OpenGL. Таким образом, что-то с этой конкретной командой определенно является проблемой.

Я использую glew с SDL. Я использовал GLee раньше и сталкивался с той же проблемой.

Читая документацию, я предполагаю, что это ошибка:

GL_INVALID_OPERATION генерируется, если программу не удалось сделать частью текущего состояния.

но я не уверен точно, что могло вызвать такую вещь. Команда выдается в рабочем контексте OpenGL, поскольку все предыдущие команды шейдера работают нормально. Это не находится между блоками «begin» и «end».

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

Редактировать:

Решаемая: о Боже, это было запоздало, я пропускал возврат при одном из моих вызовов функции в другом месте и поэтому не передавал обратно созданную мной программу.

Комментарии:

1. Я вижу, что ваши информационные журналы в порядке, но действительно ли объекты / программа правильно скомпилированы / связаны? (glGetObjectiv(GL_COMPILE_STATUS), glGetProgramiv(GL_LINK_STATUS)). Я знаю некоторые сценарии, когда программе не удается установить связь, несмотря на тот же «хороший» информационный журнал, который она выдает.

Ответ №1:

Не видя вашего кода, это трудно определить, но поскольку вы явно указываете результаты glCompileShaderARB (раз два), но не glLinkProgramARB я догадаюсь, что вы забыли glLinkProgramARB (после чего, кстати, вы можете безопасно glDeleteObjectARB использовать два шейдерных объекта).

Комментарии:

1. Спасибо за ответ. Я связал программу без проблем, хотя не знал, что смогу удалить шейдерные объекты после связывания. Код сложно вставить, поскольку он достаточно инкапсулирован в некоторые дополнительные объекты, но вот вкратце, что я выполняю: pastebin.com/w9G1KiWd