2012-06-22 2 views
3

Я пытаюсь найти причину segfault при вызове glDrawArrays (как говорит gdb) в моей простой программе.Как отлаживаются программы OpenGL?

Когда я напрямую использую вызовы OpenGl, программа работает нормально. Но когда я завершаю их на два класса (под строительство, vao и vbo), программа segfaults.

Итак, в моих обертках я определенно отключил что-то или установил то, что я не должен.

Мой вопрос: как мне получить некоторые диагностические данные, которые помогут мне определить источник проблемы?

Я искал что-то похожее на то, что делает glGetShaderiv, но для vao и vbo s, это скажет мне, если у меня есть .. то есть .. несвязанный буфер по ошибке.

[Я не размещаю код здесь, но если кто-то из вас захочет пожертвовать некоторое время, проверив пример segfaulting, here is a tar.gz of the source. Вы должны будете работать библиотеки SFML-2.0rc, GLEW и GCC> = 4,6]

ответ

2

Данные VBO должны быть выделены при вызове glVertexAttribPointer. Но поскольку вы вызываете его впоследствии, ранее называемый glVertexAttribPointer будет инструктировать VAO указывать на недопустимое местоположение - таким образом, сбой во время рисования.

Посмотрите, как вы вызываете код в своем комментированном разделе - сначала glBufferData и только затем glVertexAttribPointer.

+0

Спасибо, в этом была проблема. (Наряду с тем, что я вызывал glBindVertexArray с нулевым аргументом, прежде чем я закончил все операции над VAO.) – manasij7479

4

Попробуйте программу как GDEBugger:. http://www.gremedy.com/

Это позволяет легко проверить состояние OpenGL и дать вам хорошее диагностика.

+0

Кажется интересным, я попробую. (Также похоже, что это было бы замечательным инструментом для обучения OpenGl гладко!) – manasij7479

+0

Я пытался запустить свою программу в нем довольно долгое время, но он не очень много работал с моей ОС. (/ usr/lib и/usr/lib64, которые не исправлялись). Я попытаюсь заставить его работать в следующий раз, когда у меня возникнут серьезные проблемы. – manasij7479