2012-04-27 46 views
6

OpenGL ESはOpenGLのサブセットであると主張しています。理論的には、OpenGL ESプログラムはPC上で通常のOpenGLとして実行できます。しかし、OpenGL ESは、いくつかの関数(glOrthoglOrthof)の命名規則が少し違うようです。これは問題ですか? OpenGL ESアプリケーションは、OpenGL GPU /ドライバと共にそのまま使用できますか、または再コンパイルのみで動作しますか?OpenGL ESとOpenGLの下位互換性はありますか?

答えて

9

OpenGL GPU /ドライバをOpenGL GPU /ドライバとともにそのまま使用できますか、または再コンパイルのみで動作しますか?

ちょっと号、しかし、あなたはあなたがいないあなたのために、ES 1.xではなく、2.xの話をしていることを意味する、glOrthoを育てたからです。 ES 3.0では、新しいものをいくつか追加しています。詳細については下を見てください。

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

ES 2.xはデスクトップGL 2.1とはるかに類似していますが、依然として適切なサブセットではありません。たとえば、glTexImage2Dは根本的に異なる動作をします。デスクトップGLでは、最後の3つのパラメータはテクスチャの実際のフォーマットには影響しません。 ES 2.0の下では、テクスチャの実際のイメージフォーマットを定義しています。あなたは、有効なglTexImage2Dコマンドを書くことができます。これはES 2.0とデスクトップGL 2.1で同じことをするでしょうが、あなたはデスクトップ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のシェーダを書くのは難しいです。

これはもちろん克服することはできません。異なる言語のために#ifdefされることができるいくつかの賢明な#defineはこれをかなり単純にすることができます。しかし、あなたはまだこれらのすべてのケースを見つけなければなりません。

最近リリースされた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.3の機能の一部は、GL 3.3では技術的には機能しませんが、GL 3.3の一般的なコア拡張機能(ARB_texture_storage、互換性を高めるためのES3_compatibility拡張など)にあります。しかし、glTexImage2Dは実際には2つのケースで同じように動作するようになっています。さて、interopは、両方で利用できない機能性を回避するという問題です。

4

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

OpenGL ES 2.0は、以前の即時モードスタイル(OpenGL 2.1以前のバージョン)から最新のシェーダベースモデルにモデルが変更されたため、実際には1.xと下位互換性がありません。

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

OpenGL 4.xのGL_ARB_ES2_compatibility extensionは、デスクトップとモバイルエディションを互いに近づけて移植性を向上させるのに役立ちます。

glOrthoglOrthofの違いは明らかに簡単ですが、他の機能のためにラッパーを作成する必要があります。

+0

"OpenGL(4.x)とOpenGL ES(2.x)の現在のバージョンは非常によく似ており、互換性があります。あなたが*ポスト2.1の機能を実際に*使用*していない場合。整数テクスチャ、均一バッファオブジェクト、separate_shader_objects、高度なシェーダ(ジオメトリとテッセレーション)と同様、私は続けることができますが、私の要点は明らかです。あなたのデスクトップGLコードが脆弱な場合にのみ似ています。 –

+2

訂正していただきありがとうございます。私はそれに応じて上記を更新したので、今はそれが願っています。私もあなたの答えをupvoted。 – gavinb

関連する問題