3D モデルをレンダリングする OpenGL ビューがあります。これは Apples EAGLView の基本的な修正です。このビューはコントローラーの .view に追加され、 presentModalViewController: で表示されます。ユーザーがビューの表示を選択する前に、アプリの起動時にすべてのモデルの読み込みと OpenGL 状態の構成をバックグラウンド スレッドで実行したいと考えています。これは可能ですか?テクスチャをロードし、ライティングをセットアップし、通常はすべてをバックグラウンド スレッドでレンダリングする準備を整えることはできますか? バックグラウンドでレンダラーをセットアップしているときに、メインのアプリの Cocoa タッチ部分が OpenGL の状態を操作するのではないかと心配しています。コントローラーはもちろんメインスレッドから表示されます。OpenGl-ES のこのレベルの理解は、私が頻繁に扱うものではないので、私の質問が何らかの形で奇妙である場合は、優しくしてください :)
1 に答える
1
スレッドでバックグラウンドロードを絶対に行うことができます。重要なポイントのいくつか:-OGL状態のセットアップをバックグラウンドスレッドに移動することには、おそらくあまりメリットはありません-最初の描画の開始前にコンテキストで誘発する変更の合計量は、合計されませんたくさんの時間。バックグラウンドロードは、テクスチャとVBOだけでなく、データをGLにフィードするために最初に発生する必要のあるロード時間にも役立ちます。-コンテキストをメインスレッドから切り離して、ワーカースレッドに移動する必要があります。これは、pthreadを使用して、コンテキストをワーカーに「送信」します。-私たちの使用では、GLビューを非表示にして、ロード状態のときに描画する必要がないようにします。(率直に言って、ロード中は有用なものが含まれていない可能性があります。)したがって、非同期ロード中、表示されるUIはすべて非GLCocoaです。
このアプローチは、デスクトップで行うよりも困難です。2つのコンテキストでオブジェクトを共有するだけです(ロードと描画を同時に実行できるようにするため)。1年以上前にそのアプローチを検討したとき、IOSでは不可能でした。今は可能かもしれませんが、わかりません。
于 2010-11-11T20:03:58.310 に答える