6

OpenGL ES は OpenGL のサブセットであると主張しています。これは、理論的には、どの OpenGL ES プログラムも PC 上で通常の OpenGL として実行できることを意味します。ただし、OpenGL ES には一部の関数 ( glOrthovs glOrthof) の命名規則がわずかに異なるようです。これは問題ですか?OpenGL ES アプリは、そのままの状態で、または再コンパイルのみで、OpenGL GPU/ドライバーで動作しますか?

4

2 に答える 2

9

OpenGL ES アプリは、そのままの状態で、または再コンパイルのみで、OpenGL GPU/ドライバーで動作しますか?

いいえ、ちょっと、でもあなたが を育てたので、あなたglOrthoは 2.x ではなく ES 1.x について話しているのであって、あなたのためではありません。ES 3.0 はいくつかの新しい要素をミックスに追加します。詳細は下部をご覧ください。

OpenGL ES 1.x は、どのバージョンの OpenGL のサブセットでもありません。それらはいくつかのかなり重要な違いです。共通のサブセットにコーディングできるかもしれませんが、それを行うために多くのものを捨てることになります。両方のプラットフォームで。

ES 2.x は、デスクトップ GL 2.1 と非常に多くの類似点を共有していますが、それでも適切なサブセットではありません。たとえば、glTexImage2D根本的に異なる動作をします。デスクトップ GL では、最後の 3 つのパラメーターはテクスチャの実際の形式には影響しません。ES 2.0 では、これらはテクスチャの実際の画像形式を定義するものです。ES 2.0 とデスクトップ GL 2.1 で同じことを行う有効なglTexImage2Dコマンドを作成できますが、デスクトップ GL ではそれを行うために多くのことを捨てています (サイズの大きい内部フォーマットを選択するなど)。

そうは言っても、一般的には、抽象化を使用して API の違いを封鎖することができます。ES 2.0 で遭遇する大きな問題は GLSL です。

GLSL ES では、いくつかの新しいキーワード、特に精度修飾子が追加されました。デスクトップ GLSL 1.20 (GL 2.1 とペアになる) には、これらのキーワードがありません。デスクトップ GLSL 1.30以降は対応していますが、それらは GL 3.0ハードウェアにバインドされています。そのため、デスクトップ GL 2.1 ハードウェアで変更せずに実行できる ES 2.0 用のシェーダーを作成することは困難です。

もちろん、これは克服できないことではありません。いくつかの賢明な #defines (さまざまな言語に対してそれ自体を #ifdef することができます) を使用すると、これをかなり簡単にすることができます。しかし、これらすべてのケースを見つける必要があります。

最近リリースされた OpenGL ES 3.0 も OpenGL 3.3 の適切なサブセットではありませんが、ES 2.0 よりはかなり近いものです。本当に重要なことは、GLSL 3.30 が GLSL ES 3.00 とほとんど同じであることです。そのため、2 つの間でシェーダーをより簡単に交換できます。

ES 3.0 には 3.3 にはない特定の制限がありますが、一般的にこれらは簡単に回避できます (そして、それらのほとんどを使用することはとにかく悪い習慣です)。また、ES 3.0 の機能の一部は技術的には GL 3.3 にはありませんが、GL 3.3 の一般的に利用可能なコア拡張機能 (ARB_texture_storage など、互換性を高めるための ES3_compatibility 拡張機能があります) に含まれています。glTexImage2Dしかし、実際には 2 つのケース間で同じように機能するようになり、作業がはるかに簡単になりました。現在、相互運用性は、両方で利用できない機能を回避することの問題です。

于 2012-04-27T07:23:17.817 に答える
4

現在のバージョンの OpenGL (4.x) と OpenGL ES (2.x) は似ていますが、再コンパイルするだけではコードを移植できないほどの違いがあります。@Nicol Bolas が指摘しているように、OpenGL には OpenGL ES には存在しない多くの機能がありますが、一部の API はわずかに異なる動作をします。また、プラットフォームのサポートも大きく異なります (つまり、レンダリング コンテキストの設定など)。

OpenGL ES 2.0 は、実際には 1.x と下位互換性がありません。これは、モデルが古い即時モード スタイル (OpenGL 2.1 以前に組み込まれている) から、より最新のシェーダー ベースのモデルに変更されたためです。

OpenGL v3 および v4 では、時代遅れの 2.x 機能の多くが廃止されていますが、主要なドライバーは互換モードを保持して、この古いサポートを継続しています。

OpenGL 4.xのGL_ARB_ES2_compatibility 拡張機能は、デスクトップ版とモバイル版を近づけて移植性を容易にするのに役立ちます。

glOrthovsのような小さな違いglOrthofは明らかに管理が簡単ですが、他の機能のラッパーを作成する必要があります。

于 2012-04-27T06:42:06.767 に答える