0

PC (Windows、Linux、Mac) および iOS 用のクロス プラットフォーム レンダラーに取り組んでいます。iOS 部分は現在 OpenGL ES 2.0 を中心に構築されており、ES 3.0 にアップグレードしたいと考えていました。だから私は次の行を置き換えました(それは動作します)

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

この行で:

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];

...そして、OpenGLES/ES3/gl.h と OpenGLES/ES3/glext.h を含めました。

シミュレーターではこれは問題なく動作しますが、実際の iPad で実行すると動作しなくなり、コンテキストは nil になります。

iPad は最新バージョンの iOS (iOS 8.3) を実行しており、ES 3.0 では問題がないはずなので、ここで何が欠けているのか本当にわかりません。エラーは発生せず、実際にデバッグすることもできません (ここでは「ステップ イン」が機能しないようです)。

4

1 に答える 1

1

OpenGL ES 3 が OpenGL ES 2 に追加する機能はハードウェアに依存するため、それをサポートするハードウェアでのみ ES3 コンテキストを作成できます。コンテキストの作成時に戻っnilた場合は、OpenGL ES 2 でのレンダリングにフォールバックする必要があります。

ES3 をサポートする iOS ハードウェアは、A7 以上の GPU を搭載したものです。それは、iPad Air、iPad Air 2、iPad mini 2 および 3、iPhone 5s、6、および 6 plus であり、おそらくその後に登場するものすべてです。

ES3 の GPU 要件は Metal の場合と同じであることに注意してください。そのため、フォールバック パスを使用して複数のレンダラーを実行する場合は、これらのデバイスで可能な限り最高のパフォーマンスを得るために全力を尽くすことをお勧めします。

また、ES3 のコア OpenGL ES 仕様の一部である機能の多くは、ES2 の拡張機能として iOS でも引き続き利用できます。したがって、たとえばインスタンス化だけを探している場合は、ES2 に固執してすべてのデバイスをサポートできます。

于 2015-06-19T23:26:56.463 に答える