opengl - glBeginQuery не объявлен - PullRequest
0 голосов
/ 09 мая 2011

я хочу использовать команды:

glBeginQuery

glEndQuery

glGetQueryObjectiv

glGenQueries

но компилятор выдает мне ".. не был объявлен"

Я использую Linux, и у меня есть эти файлы заголовков (которые до сих пор работали нормально)

          #include <GL/gl.h>
          #include <GL/glu.h>
          #include <GL/glut.h>
          #include <GL/glx.h>

          #include <X11/X.h>    
          #include <X11/keysym.h>

Есть ли решение для этого?

1 Ответ

3 голосов
/ 09 мая 2011

Функции запроса объявлены в glext.h.Обратите внимание, что включение этого файла не будет магическим образом инициализировать указатели функций и не проверять доступность функций (хотя функциональность 1.5 в значительной степени вездесуща, хорошо написанная программа не может просто предполагать, что она работает).Вы должны по крайней мере правильно инициализировать указатели, иначе ваша программа будет аварийно завершать работу и гореть.

Если вы не знаете, о чем я сейчас говорю, или если вы не уверены, каким-либо образом, скачайте GLEW .Это избавит вас от большой боли.

РЕДАКТИРОВАТЬ: Более подробное объяснение того, как это работает, заключается в следующем: функциональность, которая выходит за рамки ядра 1.2 (или 1.3 в случае Linux,Я полагаю) это реализовано только через механизм указателя функции.Для этого функция типа glBeginQuery будет иметь указатель функции typedef с именем PFNGLBEGINQUERYPROC, который используется для инициализации статической глобальной переменной с именем glBeginQuery.Вы, конечно, тоже можете делать что-либо еще (вы можете поместить все свои указатели функций в структуру или дать им глупые имена), но это то, что обычно делается.

Вы также должны проверить этоподдерживается правильная версия и / или расширения, в противном случае вы не знаете, реализована ли необходимая вам функциональность вообще.

GLEW делает все это за вас, поэтому она просто работает , еслиВы делаете:

#include <GL/glew.h>
  ...
if (glewInit() != GLEW_OK)
    fail_with_error();

Sidenote: Вы можете иметь glext.h генерировать прототипы, задав GL_GLEXT_PROTOTYPES, но это не очень полезно, потому что это заставит компоновщика жаловаться напропущенный символ (на самом деле, мне всегда было интересно, почему он вообще существует).

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