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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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