2013-04-20 3 views
0

Я построил простое окно OpenGL и проверил его поддержку. Поддержка он вернулся:opengl 3.3/glew 1.9 Поддержка VBO возвращает false

  • GLEW: 1.9.0

  • OpenGL: 3.3.0

проблема, у меня из-за создания формы (ВБО). При создании формы, основанной на учебнике, я не мог получить изображение (простой треугольник) для отображения на экране. Единственный способ добиться этого - использовать режим Immediate или базовый массив вершин.

я осведомился о проверке поддержки VBÖ с GLEW, но все предложения, которые я нашел, такие как:

if (glewGetExtension("GL_VERSION_1_9") 
    && glewGetExtension("GL_ARB_vertex_buffer_object")) 
     { 
      std::cout << "VBO supported." << std::endl; 
     } 
    else 
     { 
      std::cerr << "ARB_vertex_buffer_object not supported!" << std::endl; 
     } 

возвращается ложь.

Любые предложения относительно того, что может быть проблемой?

+0

Если вы используете основные функции (а не ARB), достаточно проверить OpenGL 1.5 (например, 'if (! GLEW_VERSION_1_5) {error();}'). – jdehesa

ответ

0

Разобрался почему я получаю ошибки. Проблема была в том, что я проверял glew перед созданием окна. Поэтому после добавления условия ПОСЛЕ создания окна все должно было работать так, как должно было. На всякий случай кто-то столкнется с этой проблемой, вызовите glewInit() после создания окна.

1

Остановить проверку на ARB_vertex_buffer_object. Фактически, остановите , используя ARB_vertex_buffer_object. Используйте the core functionality, а не функциональность расширения. Если вы запрашиваете OpenGL версии 3.3, то у вас есть функциональность буферного объекта в ядре. Используйте это.

glewGetExtension("GL_VERSION_1_9") 

Существует не такое расширение. Также нет версии OpenGL 1.9, поэтому я понятия не имею, почему вы это проверите.

Если вы хотите, чтобы проверить наличие OpenGL версии, вы должны use the OpenGL functionality для делать это:

GLint major = 0; 
GLint minor = 0; 
glGetIntegerv​(GL_MAJOR_VERSION​, &major); 
glGetIntegerv​(GL_MINOR_VERSION​, &minor); 
+0

Спасибо за ввод, но это не помогло проверить, поддерживаются ли VBOs или нет. Плюс glGetIntegerv не определен (ошибка получена). – SpicyWeenie

+1

@SpicyWeenie: Если * 'glGetIntegerv' * не определен, у вас есть серьезные проблемы в коде. Это означает, что вы не можете найти даже основные функции GL 1.1. –