3

多くのテクスチャを使用し、1 つの EAGLView にレンダリングするアプリを iPad で実行しています。ここで、最初の EAGLView とテクスチャを共有する 2 つ目の EAGLView が必要です。

Apple のコードのいくつかの設計ミスを修正することで、両方のビューを画面上で並行して正常にレンダリングできます (たとえば、デフォルトの ViewController は、複数の子 EAGLView オブジェクトをサポートするために微調整が必​​要です)。しかし、テクスチャを共有することはできません。

テクスチャを複製することはできません (メモリ使用量が 2 倍になります - そして、メモリのほとんどを既に使用しています)。

複数の EAGLView 間でテクスチャを共有する方法に関する Apple のドキュメントを見つけることができません - これが EAGLShareGroup の目的であり、各 GLView が独自のコンテキストを持つことを可能にする「ヒント」がありますが、2 つのコンテキストは ShareGroup を共有します - しかし私が見つけることができる明確なものは何もありません。

この質問に対する答えに従ってみました:複数の EAGLViews が使用されている場合、テクスチャが描画されない

……でも、それは本当の答えではありませんでした。実際の使用方法を説明せずに EAGLSharegroup を指していました - まったく違いがないようです。また、複数のスレッドからのレンダリングに関するページを間接的に指摘しました。これはまったく別の問題であり、そこにリストされている問題 (アプリのクラッシュなど) はありません。

4

2 に答える 2

3

Apple の文書化されていない EAGLShareGroup ( http://developer.apple.com/library/ios/#documentation/OpenGLES/Reference/EAGLSharegroup_ClassRef/Reference/EAGLSharegroup.html ) ... その秘密の init メソッドを知らなければインスタンス化できないことが判明しました( s)。

それが何であるかはわかりません-文書化されていません-しかし、EAGLContext を取得して最初の共有グループをインスタンス化し、それを共有のグローバル共有グループにすることができます。

したがって、以下は決して機能しません。

EAGLShareGroup *group = [[EAGLShareGropu alloc] init];
EAGLContext *context1 = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 sharegroup:group];
EAGLContext *context2 = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 sharegroup:group];

ただし、以下は完全に機能します。

EAGLContext *context1 = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
EAGLContext *context2 = [[EAGLContext alloc] initWithAPI:[context1 API] sharegroup:context1.sharegroup];

(context2 も context1 の API を使用するように編集されています - Apple の ES プログラミングガイドに従って、Pivo​​t のコメントに従って)

于 2011-09-25T18:36:28.130 に答える
3

2 つのオプションがあります。最初のコンテキストと同じ共有グループを使用して 2 番目のコンテキストを作成します。Adam の 2 番目のコード例を使用します。

または、両方のビューに同じコンテキストを使用できます。これを行うには、ViewController がコンテキストを所有する必要があります。次に、コンテキストを使用して特定のビューにレンダリングする場合は、そのビューのフレーム バッファ オブジェクトで glBindFramebuffer() を呼び出し、ビュー固有のカラー バッファで -presentRenderbuffer を呼び出します。このケースは、おそらく 2 つの共有コンテキストを使用するよりもわずかに効率的です。

于 2011-09-25T19:31:20.950 に答える