web-dev-qa-db-ja.com

OpenGL ES1.1またはOpenGLES 2.0を選択しますか?

新しいクロスプラットフォームのopenGLプロジェクト(iPhoneとPC用のプライマリ)を開始します。それで、主な質問があります:OpenGL ES1.1またはOpenGLES 2.0のターゲティング?または両方?これまでのところ、Open GL ES 1.1は実際には非推奨ではありませんか?それでは、openGL ES 2.0について何を話しますか?プログラム可能な頂点とフラグメントシェーダー-他に何かありますか?パフォーマンスの低下について聞いたことがあります。アルファブレンディングなど-それは本当ですか?openGL ES 2.0コードもPCで実行する必要があると思います-では、openGL ES 2.0は本当に将来を意識していますか?

そこにいる他の開発者はまだOpenGLES 1.1または2.0のコーディングをしていますか?なぜ? openGL ES 2.0を選択した場合、openGL ES1.1との下位互換性のために多くのオーバーヘッドが発生すると思います。しかし、openGL ES 2.0をサポートしていないiPhoneはたくさんあります-これをどのように達成すればよいですか?何か経験はありますか?

私はこの質問だけを見つけました: iPhoneのOpenGL ES 1.1または2. 一種の関連性がありますが、実装についてはそれほど深くはありません...したがって、アドバイスは大歓迎です!どうもありがとうございます!

31
Constantin

OpenGL ES 1.1と2.0のどちらを使用するかは、アプリケーションで何をしたいか、および互換性を保つために必要なデバイスの数によって異なります。すべてのiOSデバイスはOpenGLES 1.1をサポートし、iPhone 3G S以降のデバイス(iPhone 3G S、iPhone 4、iPad、および第3世代と第4世代のiPod touch)のみがOpenGL ES2.0をサポートします。ただし、すべてのiOSデバイスAppleは現在OpenGLES2.0と互換性があります。OpenGLES2.0をサポートしないデバイスの割合は毎日減少しています。すべてのiPadはOpenGLES2.0をサポートしています。起動するので、そのフォームファクターをターゲットにすると、サポートが保証されます。

OpenGL ES 2.0および1.1は、異なる、かなり互換性のないレンダリングパイプラインを使用します。 OpenGL ES 1.1は、固定関数パイプラインを使用します。このパイプラインでは、ジオメトリとテクスチャデータを入力し、照明などの状態を設定し、OpenGLに残りを処理させます。 OpenGL ES 2.0は、プログラム可能なパイプラインに基づいており、コンテンツが画面にレンダリングされる方法の詳細を処理するために頂点シェーダーとフラグメントシェーダーを提供します。

最も基本的な組み込み関数を置き換えるには独自のコードを作成する必要があるため、単純な3DアプリケーションにOpenGL ES 2.0を使用すると、OpenGL ES1.1よりも多くの労力が必要になる場合があります。また、そこにあるほとんどのサンプルアプリケーションと記事は1.1を対象としているため、2.0APIを使い始めるのはさらに難しい場合があります。

ただし、ジオメトリとテクスチャを処理するための独自のルーチンを記述でき、それらが画面にどのように表示されるかという事実は、OpenGL ES 2.0では、単純に不可能なこと(または多大な労力を必要とすること)を実行できることを意味します。 )OpenGL ES1.1で実行します。これには、漫画のシェーディングやアンビエントオクルージョンライティングなどのエフェクトのほか、超並列作業をGPUにオフロードするなどの興味深いことができます。

OpenGL ES 2.0でできることのいくつかの例を見たい場合は、このテーマについて教えたクラスのビデオを利用できます iTunes Uで 、2つのサンプルアプリケーションを作成しました ここ および ここ

クロスプラットフォームの互換性に関しては、シェーダーはデスクトップOpenGLでしばらくの間利用可能になっているため、OpenGL ES 1.1または2.0のいずれかを使用して構築するものはすべて、デスクトップにかなり移植可能である必要があります。

OpenGL ES 1.1で必要なレンダリングを実行できる場合は、その方法でデバイスの互換性を最大限に高めることができます。ただし、現在使用されているiOSデバイスの大部分はOpenGL ES 2.0をサポートしており(現時点ではこれに関する統計は見つかりませんが、出荷されたユニットに基づいています)、その数は時間の経過とともに増加します。 OpenGL ES 2.0を使用すると、アプリケーションを他のアプリケーションと区別するのに役立ついくつかの素晴らしい効果(Epic Citadelを参照)を引き出すことができます。

52
Brad Larson

基本的にのみiPhone 3G以前 (2010年に廃止)およびiPod第2世代以前(また、2010年9月に廃止されました)OpenGL ES1.0を使用する必要があります。

すべてのiPad、iPad mini、およびiPhone 3GS以降は、OpenGL ES2.0をサポートしています。実際、(新しいデバイスとして)販売されたiOSデバイスはすべてafter 2010年9月にOpenGLES2.0をサポートします。

OpenGL ES3.0のサポート

2013年11月の時点で、ES 2.0がサポートされるだけでなく、iPhone 5S + iPad Air(iPad第5世代)がOpenGL ES3.0になりました。

0
bobobobo

現在、OpenGLES2.0をサポートしていないデバイスがあるかどうかは真剣に疑っています。 OpenGLES 2.0にもう少し力を入れれば、特にOpenGLES 3.0がリリースされたので、将来性があります。実際、OpenGLES 2.0は1.1よりも簡単であることがわかりました。これは、独自の行列計算を実行して、シェーダーに何を入れるかを正確に指定できるからです。

もう1つは、OpenGLES 1.1 APIを使用する場合は、実際にはシェーダーとして実装されていること、そしてそれが理にかなっている場合はハードウェアではないことを知っておく必要があります。 OpenGLES 2.0は、OpenGLES1.1固定関数パイプラインを実装する頂点シェーダーを実行します。

それは非常に簡単です-少なくともOpenGLES2.0!

0
Michael