Подтвердить что ты не робот

Что делает GLEW и зачем мне это нужно?

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

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

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

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

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

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

Итак, вы, наверное, видите, что я действительно не знаю, что делает GLEW или как оно это делает.

Последняя точка; кто-нибудь знает, как использовать GLEW с GLFW? Я могу опубликовать это как отдельный вопрос.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Я бы поставил это в комментарии ответа кельтара, но я не понимаю, как.