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

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

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

2 ответов


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

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

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

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

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

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


да, OpenGL-это кросс-платформа. Код, чтобы создать контекст визуализации OpenGL, обработку ввода, ДВ.Аль., его обычно нет.