OpenGL はクロス プラットフォーム API ですが、既存のグラフィックス コンテキストでグラフィックス操作を実行することに非常に特化しており、そのようなコンテキストの作成、ウィンドウ イベントの処理、またはプラットフォーム固有の機能との統合を必要とするその他のものは含まれていません。それはプラットフォーム固有の API に任されています。
各プラットフォームの OpenGL 実装には、必要なタスクを実行するためのプラットフォーム固有の API が含まれます。Windows には WGL、X11 には GLX、OS X には低レベルの CGL または高レベルの NSOpenGLView があります。OpenGL は、これらのプラットフォーム固有の API が何らかのレベルで使用されていないと使用できません。さらに、あらゆる種類の GUI を取得するには、これと同じ種類のプラットフォーム固有のコードが必要です。
コンテキストを作成し、OpenGL の範囲外のウィンドウ処理やその他のイベントを処理するための移植可能な API を提供するために、さまざまなプラットフォーム固有の API をラップしたプロジェクトがあります。OpenGL を使い始めるときに最も一般的に使用されるのは GLUT です。OS X は GLUT を備えたフレームワークを提供しますが、OS X の最新の OpenGL サポートを使用するように更新されておらず、OpenGL 2.x のままです。2.x と 3.x の間の OpenGL コア プロファイルの導入により、OpenGL API に大きな変更がありました。つまり、現在 GLUT を使用して OS X で最新の OpenGL プログラムを作成することはできません。
さらに、クロスプラットフォームの性質上、GLUT はプラットフォームの標準に準拠した適切な GUI を提供できません。適切な GUI を提供するということは、常にプラットフォーム固有の API を直接使用すること、または少なくとも特定のプラットフォームを念頭に置いて GUI を設計することを意味します。
プラットフォーム間のもう 1 つの違いは、OS X では、標準の OpenGL ヘッダーを含めて関数を呼び出し、他のライブラリを使用しているかのように識別子を使用するだけで、サポートされているどのバージョンの OpenGL も使用できることです。Windows では、OpenGL ヘッダーは古い OpenGL 1.2 以降のものを提供しません。それよりも新しい OpenGL 機能を使用することは、OpenGL の拡張メカニズムを介してアクセスすることを意味します。このような状況下で OpenGL を使用できるようにすることを目的とした別のライブラリ GLEW があります。
したがって、OpenGL はクロスプラットフォーム API ですが、OpenGL を効果的に使用するには、コア OpenGL コードの周りにプラットフォーム固有のコードをある程度使用する必要があります。GLUT は、OpenGL 3.x で導入された OpenGL コア プロファイルをサポートするために OS X で更新されていないことを除いて、少なくとも OpenGL を学習するためのクロスプラットフォームのオプションとしておそらく優れています。しかし、GLUT を使用しても、OpenGL 拡張メカニズムを介して、または最新のヘッダーを介して直接、OpenGL 機能にアクセスする方法の違いに対処する必要があります。