iPhoneは、1.1〜2.0の間で使用するOpenGL ESコンテキストをどのように知っていますか?
-
04-10-2019 - |
質問
私は最近ネットを掘り下げてきましたが、いくつかのビデオチュートリアルが1つのOpenGL ESコンテキストを備えた古いテンプレート(Pre SDK 3.2)を示していることに気付きました。現在、それらの2つがあります。これは、新しいiMobileデバイスで利用可能なOpenGL ESの2つのバージョンを収集しました。
古いものを使用できますか、それともすべてを2回行う必要がありますか? iPhoneに古いコンテキストを使用するように指示するにはどうすればよいですか、それとも自動的にそうしますか?
解決
デフォルトでは、テンプレートはES2コンテキストを作成しようとし、それが失敗した場合、ES1コンテキストを作成しようとします。 ES 1.1のみ(すべてのデバイスでサポートされている)を使用する場合は、テンプレートプロジェクトからES2へのすべての参照を削除するだけです。
他のヒント
Frogblastが言ったことを拡張するために、テンプレートコードは2つのクラスを定義します。 ES1Renderer
と ES2Renderer
. 。 EAGLView
クラスは最初に作成しようとします ES2Renderer
インスタンスですが、それが失敗した場合、それはanを作成します ES1Renderer
. 。失敗は次の場合になります ES2Renderer
次のコードを使用して、OpenGLES 2.0コンテキストを設定できません。
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!context || ![EAGLContext setCurrentContext:context] || ![self loadShaders])
{
[self release];
return nil;
}
デバイスがOpenGL ES 2.0をサポートしている場合、これは成功するはずです。そうでない場合、アプリケーションはに戻ります ES1Renderer
OpenGL ES 1.1レンダラー。
アプリケーションに2つの異なるレンダリングクラスがある理由は、OpenGL ES 1.1と2.0が異なる互換性のないレンダリングパイプラインを持っているためです。 OpenGL ES 2.0を使用すると、いくつかの見事な効果のためにプログラム可能なシェーダーを作成できますが、OpenGL ES 1.1よりも単純なタスクで使用するのが難しい場合があります。
iPhone 3G s以降のデバイスのみがこのAPIをサポートしているため、OpenGL ES 2.0を使用している場合、多くの人がアプリケーションにフォールバックを追加します。ただし、iPadのみのアプリケーションを開発している場合は、2.0サポートがあると仮定できます。また、この機能を使用して、アプリケーションをこの機能を使用してデバイスでの実行に制限することもできます。 opengles-2
の鍵 UIRequiredDeviceCapabilities
あなたのinfo.plistで。
OpenGL ES 1.1を新しいデバイスで正常に使用できるため、2.0レンダリングパスを無効にしたい場合は、テンプレートのEAGLVIEWを無視できます。 ES2Renderer
クラスと一緒に作業します ES1Renderer
. 。また、からOpenGL ESコードを取得することもできます ES1Renderer
そして、それをeaglview内に置いてください。