Существует много недоразумений, связанных с OpenGL, и я расскажу о них в этой статье.

OpenGL - это библиотека!

Нет! OpenGL - не библиотека! Это спецификация! Всего несколько (на самом деле довольно много) страниц текста!

Да, OpenGL - это что-то вроде стандарта C ++ 17 - это просто описание того, как что-то должно работать. Это не конкретный код, который можно выполнить. Это - это, например, описание профиля ядра OpenGL 4.4.

Если вы знакомы с тем, как работают экосистемы языков программирования, вы знаете, что каждый язык программирования имеет свою собственную спецификацию, которая не обеспечивает никакой реализации, - поставщики компиляторов реализуют данную спецификацию. То же самое и с OpenGL.

И из приведенных выше утверждений мы можем вывести интересный и противоречивый факт: вы не можете «установить» OpenGL. Но вы можете спросить, где же существует код?

Что ж, стандарт OpenGL уже реализован внутри драйвера графического процессора вашей ОС производителями без каких-либо договоренностей о фактической реализации, и, таким образом, разные драйверы могут выполнять одни и те же функции по-разному.

«OpenGL» содержит «Open» = ›Это открытый исходный код.

Как я уже упоминал ранее, OpenGL не является чем-то открытым, это не какая-то кодовая база. Да, спецификация находится в свободном доступе в Интернете, но фактический код отсутствует.

Однако существуют реальные реализации стандарта OpenGL с открытым исходным кодом. Самый наглядный пример - Библиотека Mesa3D.

Хостинг Mesa находится на сайте freedesktop.org, и он был инициирован в августе 1993 года Брайаном Полом, который до сих пор активно участвует в проекте. Впоследствии Mesa получила широкое распространение и теперь содержит многочисленные материалы, внесенные различными частными лицами и корпорациями по всему миру, в том числе производителями графического оборудования из группы Khronos, которая администрирует спецификацию OpenGL. Что касается Linux, разработка также частично велась за счет краудфандинга. - Википедия

Итак, Mesa3D довольно популярен. Он используется в Linux и других системах UNIX. Но, тем не менее, NVidia намного популярнее, и поэтому на самом деле очень глупо говорить, что OpenGL является открытым исходным кодом.

Вступление

OpenGL, сам по себе, на самом деле кроссплатформенный, что очевидно - это опять же спецификация, а также драйверы существуют для каждой платформы.

В любом случае, чтобы что-то отобразить на экране, вам потребуется:

  • Получите доступ к конкретной функциональности реализации OpenGL.
  • Настройте оконную систему и контекст OpenGL.

Обе эти вещи требуют некоторого взаимодействия с операционной системой: для загрузки указателей функций реализации OpenGL, а также для создания окна.

Однако существуют библиотеки, которые действительно справляются со всем этим.

Как загрузить функции OpenGL?

GLEW (расшифровывается как OpenGL Extension Wrangler Library) - это кроссплатформенная библиотека C / C ++, которая помогает запрашивать и загружать расширения OpenGL.

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

Как инициализировать окно и контекст OpenGL?

Существует две основных кроссплатформенных реализации оконного взаимодействия и создания контекста OpenGLg:

  1. GLUT (расшифровывается как OpenGL Utility Toolkit), который является официальным и очень старым способом сделать это.
  2. Более новая библиотека, названная GLFW (расшифровывается как Graphics Library Framework). GLFW на данный момент имеет дополнительную экспериментальную поддержку для Mir и Wayland.

На мой взгляд, лучше прямо сейчас использовать GLFW в своих проектах.

Почему OpenGL?

OpenGL - определенно самый простой из доступных графических API.

Есть и другие вещи, на которые вы можете обратить внимание перед изучением OpenGL:

  • DirectX не является кроссплатформенным (работает только в Windows), но, тем не менее, люди говорят, что у него лучший API с архитектурной стороны.
  • Металл - графический API, разработанный только для операционных систем Apple.
  • Vulkan гораздо более низкоуровневый, чем все упомянутые ранее графические API. Он разработан Khronos Group, некоммерческой организацией, отвечающей за OpenGL. Как говорится, Vulkan является преемником OpenGL. Я лично считаю, что у него большое будущее.

Но в любом случае OpenGL - это то, что вам нужно изучить только из-за его простоты: знания OpenGL не будут лишними.

Где я могу это узнать?

Изучая OpenGL, я нашел много ресурсов. Я поделюсь наиболее важными из них здесь.

Я также обнаружил несколько справочных мест:

Заключение

Как я уже сказал, OpenGL - это определенно то, чему вам нужно научиться, если вы хотите стать программистом графики. API прост и основан на общих графических концепциях.

Ответы на все основные вопросы OpenGL можно найти в FAQ по Khronos, расположенном здесь.

Если у вас есть мысли / идеи / предложения по улучшению, не стесняйтесь оставлять их ниже в комментариях!