2013-08-12 4 views
3

Я экспериментирую с учебниками OpenGL 2.x и 3.x. Программы компиляции и компоновки, но затем на первый взгляд сегментации невиновных линий, таких какНе удается запустить мои собственные программы OpenGL 3 на Ubuntu

glGenBuffers (1, &m_buffer); 

Мой main() начинается с glewInit и glutInit. Программы OpenGL 1 скомпилированы и работают нормально, это просто новые функции, завернутые glew.

Один учебник говорит, что я должен иметь это испытание, прежде чем пытаться что-нибудь еще:

if (false == glewIsSupported ("GL_VERSION_2_0")) 

Этот тест всегда терпит неудачу, даже когда я изменить строку версии для GL_VERSION_1_0.

#define GL_VERSION_1_3 1 - это наивысшее такое определение в GL/gl.h, и нет каталога GL/gl3.h или GL/GL3.

apt говорит, что у меня есть freeglut3 и freeglut3-dev, а также mesa-common-dev, libglew-1.6 и libgl1-mesa-dev, но, похоже, нет никакого пакета libgl3 *.

Вот некоторая информация водителя (у меня нет никаких проприетарных драйверов, интегрированной графикой Intel Ivy Bridge с Nvidia дополнительной карты, оба я верю OpenGL 1.4 совместимый)

#> glxinfo | grep version 
server glx version string: 1.4 
client glx version string: 1.4 
GLX version: 1.4 
OpenGL version string: 3.0 Mesa 9.0 
OpenGL shading language version string: 1.30 

Все это оставило меня совершенно смущенный.

Существуют ли конкретные пакеты OpenGL2/3/4, которые я должен устанавливать, или, теоретически, это один и тот же пакет разработки для всех (для Ubuntu)?

Почему GL_VERSION_1_3 самая высокая определенная версия, тогда как glGenBuffers не вводилась до версии 1.5?

Почему glewIsSupported терпит неудачу даже для версии 1.0?

Создается впечатление, что у меня нет библиотек и/или драйверов, которые фактически реализуют API, но кажется, что я делаю согласно glxinfo, что заставляет меня думать, что что-то не так с библиотеками разработки, но я не имеют четкой картины того, что там происходит.

В принципе, что мне нужно сделать, чтобы моя программа могла компилировать/связывать/запускать?

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

+0

ли 'glewInit()' 'возвращение GLEW_OK'? – genpfault

ответ

4

Мои main() начинается с glewInit и glutInit

Неа. Вы не получите текущий контекст GL до тех пор, пока не вернется glutCreateWindow(). Вы можете позвонить glewInit() и glewIsSupported() после этого.

Что-то вроде этого:

#include <GL/glew.h> 
#include <GL/glut.h> 

... 

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 
    glutInitWindowSize(300, 300); 
    glutCreateWindow("OpenGL"); 
    glewInit(); 
    ... 
    return 0; 
} 
+0

Спасибо. Означает ли это, что я должен появиться после каждого нового контекста? – spraff

+3

Используйте [GLEW MX] (http://glew.sourceforge.net/advanced.html), если вы хотите использовать несколько контекстов. – genpfault