2

ゲーム エンジンを iOS に移植していますが、[EAGLContext presentRenderbuffer:] 呼び出しで例外が発生します。私のエンジンには、すべてのレンダリング コードがメイン スレッドとは別のスレッドにあります。エンジンは、メイン スレッドで CAEAGLLayer と EAGLContext を作成し、コンテキストをアクティブにしてビューのフレームバッファを作成し、コンテキストを非アクティブにすることによって機能します。その後、フレームごとにレンダー スレッドがコンテキストをアクティブにし、フレーム バッファーをバインドして描画し、最後にレンダー バッファーを表示します。

セカンダリ スレッドで presentRenderbuffer: を呼び出すことは可能ですか、それとも私の問題の原因ですか?

4

2 に答える 2

2

問題なくセカンダリ スレッドで EAGLContext を使用できるため、この動作は変更されたに違いないようです (iOS7/iOS8 でのテスト)。

于 2015-01-21T11:15:22.170 に答える
0

いくつかの違いがない限り、答えは NO です。メイン スレッド以外にレンダー バッファを提示することはできません。おそらく最も近い方法は、すべての描画を行うセカンダリ スレッドでテクスチャ バインドされた FBO を使用してから、テクスチャをメイン スレッドに渡し (共有コンテキストが必要です)、メイン スレッドのレンダー バッファのみにテクスチャを再描画することです。 .

もう 1 つの方法は、描画スレッドが描画の終了後にバッファ 1 と 2 を交換し、メイン スレッドが表示の完了後にバッファ 3 と 2 を交換するトリプル バッファリングを使用することです。結果が知りたいので、これを実装しようとする場合はお知らせください。

于 2014-12-12T07:23:10.357 に答える