Является ли opengl кроссплатформенным? Если нет, то как игру портировать?

Хорошо, скажем, я пишу игру на c ++ с opengl. Игра рисует на экране несколько простых фигур, таких как квадраты. Теперь скажите, что я хочу запустить «игру» на Windows. Как бы я занялся портированием? Реальный c ++ не был бы проблемой, так как он может быть перекомпилирован в соответствии с тем, что я понимаю. Но вызовы библиотеки openGL будут прерваны, не так ли? Фактическая библиотека opengl, которая будет включена для разработки, будет скомпилирована для ОС, что потребует повторной загрузки библиотеки, что приведет к изменениям исходного кода. Что нарушит программу в исходной среде, верно?

tl; dr Есть ли способ создать игру opengl для нескольких операционных систем без необходимости изменять исходный код в зависимости от платформы или загружать внешние оболочки или библиотеки?

12

Решение

OpenGL является независимым от платформы, а не кроссплатформенным. Это просто спецификация интерфейса графической библиотеки. Он не заботится о платформе, на которой он реализуется. Он просто описывает функции, как они называются и что они делают.

Конкретные реализации библиотеки OpenGL могут быть кроссплатформенными или нет. Например, столовая гора в некоторой степени кроссплатформенный, несмотря на то, что в основном разрабатывается для Linux. Вам нужно будет найти реализации OpenGL на каждой платформе, на которой вы хотите скомпилировать.

Тем не менее, есть некоторый код, который должен быть выполнен до Вы можете начать использовать интерфейс OpenGL. Этот код предназначен для настройки контекста рендеринга OpenGL. Как ты это делаешь является платформенно-зависимая. Например, в Linux GLX является расширением системы X Window, которое предоставляет интерфейс для создания контекста рендеринга. Это будет работать только на системах под управлением X Window System. В других системах вам придется делать что-то другое, чтобы выполнять ту же работу.

Существуют кроссплатформенные библиотеки для выполнения этой работы по созданию контекста рендеринга для вас. Например, взгляните на GLFW. Это современная альтернатива библиотеке под названием GLUT, но GLUT больше не поддерживается. Вы можете избежать использования кода для конкретной платформы в своем источнике и передать эту работу библиотеке для управления.

Обратите внимание, что OpenGL предоставляет только графическую библиотеку. Ничего более. Может быть много других библиотек и интерфейсов, которые использует игра, которые не будут зависеть от платформы, такие как ввод, звук и т. Д. Если ваша игра содержит только чистый C ++, а единственная библиотека — OpenGL, то источник может очень плавно переноситься на другую платформу. До тех пор, пока ваш код C ++ не полагается на какое-либо неопределенное поведение. Возможно, вам даже не придется изменять контекст рендеринга, если вы используете библиотеку, такую ​​как GLFW.

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

17

Другие решения

Да, OpenGL является кроссплатформенным. Код для создания контекста рендеринга OpenGL, обработки ввода и т. Д., Обычно его нет.

4

По вопросам рекламы [email protected]