web-dev-qa-db-ja.com

openglはクロスプラットフォームですか?そうでない場合、ゲームはどのように移植されますか?

さて、openglを使用してC++でゲームを書いているとしましょう。ゲームは、画面上に正方形のようないくつかの単純な形を描きます。ここで、Windowsで「ゲーム」を実行したいとします。どうすれば移植できますか?実際のc ++は、私が理解している環境に合わせて再コンパイルできるため、問題にはなりません。しかし、openGLライブラリへの呼び出しは壊れますね。開発用に含まれる実際のopenglライブラリはOS用にコンパイルされるため、ライブラリを再ダウンロードする必要があり、ソースが変更されることになります。元の環境でプログラムを壊すのはどれですか?

tl; drプラットフォーム固有になるようにソースコードを変更したり、外部ラッパーやライブラリをダウンロードしたりせずに、複数のオペレーティングシステム用のopenglゲームを構築する方法はありますか?

14
pipsqueaker117

OpenGLは、クロスプラットフォームではなく、プラットフォームに依存しません。これは、グラフィックライブラリのインターフェイスの仕様にすぎません。実装されているプラ​​ットフォームには関係ありません。機能、それらが何と呼ばれるか、そしてそれらが何をするかを説明するだけです。

OpenGLライブラリの特定の実装は、クロスプラットフォームである場合とそうでない場合があります。たとえば、 Mesa は、主にLinux用に開発されているにもかかわらず、ある程度クロスプラットフォームです。コンパイルする各プラットフォームでOpenGLの実装を見つける必要があります。

ただし、OpenGLインターフェイスの使用を開始する前に実行する必要のあるコードがいくつかあります。このコードは、OpenGLレンダリングコンテキストを設定するためのものです。それをどのように行うかプラットフォーム固有です。たとえば、Linuxでは、GLXはX Window Systemの拡張機能であり、レンダリングコンテキストを作成するためのインターフェイスを提供します。これは、X WindowSystemを実行しているシステムでのみ機能します。他のシステムでは、同じ仕事をするために何か違うことをしなければなりません。

レンダリングコンテキストを作成するこのジョブを実行するためのクロスプラットフォームライブラリがあります。たとえば、 [〜#〜] glfw [〜#〜] を見てください。これはGLUTと呼ばれるライブラリの最新の代替手段ですが、GLUTはもはや維持されていません。ソースにプラットフォーム固有のコードが含まれるのを避け、そのジョブをライブラリに渡して管理することができます。

OpenGLはグラフィックライブラリのみを提供することに注意してください。これ以上何もない。入力やサウンドなど、プラットフォームに依存しない、ゲームが使用する他の多くのライブラリやインターフェイスが存在する可能性があります。ゲームに純粋なC++のみが含まれ、ライブラリがOpenGLのみの場合、ソースは別のプラットフォームに非常にスムーズに移植できます。 、C++コードが不特定の動作に依存しない限り。 GLFWのようなライブラリを使用した場合は、設定されたレンダリングコンテキストを変更する必要さえないかもしれません。

[〜#〜] sfml [〜#〜][〜#〜] sdl [〜#〜] などについても言及する価値があります。これらのライブラリはクロスプラットフォームであり、あらゆる種類のマルチメディアのインターフェイスを提供します。彼らはあなたのOpenGLレンダリングコンテキストをセットアップし、あなたのためにウィンドウを作成し、画面に描画し、I/Oとサウンドを処理します。それらはいくつかの点で制限される可能性がありますが、すべてのプラットフォームで非常に迅速に優れた位置に到達できるという点で強力です。

17

はい、OpenGLはクロスプラットフォームです。 OpenGLレンダリングコンテキストを作成し、入力などを処理するコード。通常はそうではありません。

4
K-ballo