2013-07-23 2 views
22

Хорошо, поэтому я уже знаю, зачем мне нужен GLEW, но только до определенной точки.Что делает GLEW и зачем мне это нужно?

Если я использую современные средства OpenGL, возможно, начиная с версии 3.0 и/или использую основной профиль, тогда требуется GLEW, так как без него была произведена ошибка, такая как glGenVertexArrays.

Таким образом, GLEW выполняет небольшую работу по фоновому использованию, включая современные функции OpenGL, которые мы хотели бы использовать, возможно.

Помимо этого, он делает что-нибудь еще? Кроме того, как это работает.

В качестве примера можно ли улучшить кросс-платформенную компиляцию? (Требуется меньше модификаций кода при переходе с Linux на Windows или OS X?

Это также улучшило «кросс-платформенность» графического оборудования? Например, скажем, у нас было два одинаковых компьютера, включая OS. Программа скомпилирована с использованием команд OpenGL 4.3 на одной системе. Если в другой системе есть графическая карта или драйвер, который поддерживает OpenGL 3.3, помогает ли GLEW с этим? (Возможно, компиляция шейдеров для более старой версии OpenGL?)

Таким образом, вы, вероятно, может видеть, что я на самом деле не знаю, что делает GLEW или как он это делает

Один последний пункт,.? кто-нибудь знает, как использовать GLEW с GLFW я мог бы опубликовать, что в качестве отдельного Ques фактически.

ответ

11

GLEW не является обязательным, как вы выразились. Вы можете использовать заголовок glcorearb.h или что-то в этом роде. Однако, если вы связываетесь с какой-либо функцией - она ​​должна существовать на целевой платформе или ваша программа не запускается. GLEW и другие точно справляются с этим - вы не связываетесь напрямую с функциями GL, а вместо этого получаете указатели на функции после фазы инициализации. Это позволяет вам проверять во время выполнения, какие расширения присутствуют и какие функции могут быть использованы.

Единственное, что помогает с переносимостью, это получить указатели на функции - это может быть wglGetProcAddress/glxGetProcAddress, и он является аналогом для яблочных ОС. Нет, это не так. Однако существует множество доступных расширений GL.

GLEW не требует сенсорных точек с выбранной библиотекой инициализации GL - просто вызовите glewInit после создания контекста GL.

+0

Если я создаю окно, а затем вызываю glewInit(), я получаю ошибку segfault? – user3728501

+0

@EdwardBird: Вы создали контекст OpenGL в этом окне? Является ли контекст OpenGL активным при вызове glewInit? – datenwolf

+0

Да, да, но я исправил проблему сейчас - спасибо в любом случае (: – user3728501

5

Для правильной инициализации GLEW контекст OpenGL должен быть создан иwglMakeCurrent() должен вызываться перед вызовом glewInit();

Я бы поставил это в комментариях ответ Keltar, но я не вижу, каким образом.

+0

Спасибо за добавление - upvoted – user3728501

Смежные вопросы