Несоответствие информации о версии заголовочных файлов OpenGL - PullRequest
2 голосов
/ 30 декабря 2011

Я немного играю с программированием opengl на linux, и у меня есть некоторые сомнения.

glxinfo дает мне следующее для версии OpenGL:

Строка версии OpenGL: 2.1 Mesa 7.11

Полагаю, это означает, что моя система поддерживает OpenGL 2.1 с использованием реализации Mesa.

Затем, если я посмотрю на GL / gl.h из / usr / include, я найду что-то вроде:

#define GL_VERSION_1_1 1
#define GL_VERSION_1_2 1
#define GL_VERSION_1_3 1
#define GL_ARB_imaging 1

поэтому GL_VERSION_xx не определены для 1.4, 1.5, 2.0. Поэтому мой вопрос: почему заголовочный файл не содержит определения для версий GL до 2.0 (по крайней мере)? Я должен изменить заголовочный файл GL / gl.h на что-то более подходящее?

Для информации, я использую стандартную установку Ubuntu Linux. Вот еще некоторые сведения из glxinfo:

OpenGL vendor string: X.Org R300 Project
OpenGL renderer string: Gallium 0.4 on ATI RV515
OpenGL version string: 2.1 Mesa 7.11
OpenGL shading language version string: 1.20

Francesco

1 Ответ

3 голосов
/ 30 декабря 2011

Вам нужно разделить между фактически реализованной версией OpenGL и тем, что присутствует в заголовочных файлах.Содержимое заголовочных файлов OpenGL обычно является своего рода наименьшим общим знаменателем по той причине, что OpenGL имеет систему расширений .Реализации OpenGL предлагают свои возможности (также) через систему расширений, которая фактически является некоторой формой динамического связывания библиотек.

Это позволяет программам, которым требуется расширенная функциональность, работать в системах с меньшими возможностями, либо корректно прерывать работу, давая некоторыеполезное сообщение об ошибке вместо «обязательного символа glShaderSource в libGL.so не разрешается», которое может сбить пользователя с толку или даже вызвать переход в режим совместимости.

Самый простой способ получить более высокую версию OpenGLВозможности заключаются в использовании библиотеки GLEW (http://glew.sourceforge.net), которая сводится к включению GL/glew.h вместо GL/gl.h и вызову glewInit() сразу после создания контекста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...