2009-07-15 10 views
9

私は(Cocos2Dを使用して)開発中のiPhoneゲームのローディングバーを作成しようとしていましたが、私はマルチスレッドのアプローチを使いたいと思っていました。Cocos2D-iPhoneのマルチスレッドOpenGLプログラミング

1つのスレッドは、ロード画面を表示し、新しいスレッドがサイレント(spriteWithFile介して)バックグラウンド内のすべてのスプライトをロードしながら、アプリケーションのメインイベントループを実行した後、層に追加します。

私は(performSelectorOnMainThread経由でメインスレッドへの負荷状況の更新を送信します)NSThreadのdetachNewThreadSelectorメソッドを使用して、新しいスレッドを作成します。

私が直面している問題は、新しいスレッドでBUS ERRORまたはメモリアクセスエラーで何らかの種類のOpenGL呼び出し(例えばspriteWithFileメソッド内に見つかったもの)が死ぬことです。これは、両方のスレッドが同時にOpenGL呼び出しを試みるか、新しいスレッドがOpenGLコンテキストを認識していないためです。

複数のスレッドがCocos2D-iPhoneを使用してiPhone上でOpenGL呼び出しを行うためには、何が行われなければならないか。

答えて

2

これもやりたいです。

私はthis threadから開始しています。

PS:この回答は非常に古く、非同期テクスチャの読み込みは、iOS5がCVOpenGLESTextureCachesを介して「フリー」テクスチャのアップロードを追加して以来、これまでと同じくらい有用であるとは思われません。もちろん、(&は)セカンダリスレッドで資産を読み込むことはできますが、そのスレッドをEAGLContextにすることは今のようには思われません。

+0

http://www.cocos2d-iphone.org/forum/topic/363これも役に立ちました。 –

+0

最初の回答にリンク: 1.私はブラウザからマルウェア警告を受け取ります。私はまだそれを無視すると言うとき 2.私は404を取得します。 –

+0

私はリンクを修正し、答えを更新しました。 –

1

Appleは、マルチスレッドOpenGL hereのいくつかの良いガイドラインを持っています。

-1

Cocos2d best practicesは、NSTimerを使用しないことをお勧めします。スレッドにも同じことが当てはまります。おそらく、CocosのTimer objectを使用してください。これにより、スレッド管理がCocosに残り、正しいグラフィックスコンテキストにアクセスできるようにする必要があります。 HTH。これは、現在提供addImageAsync法によって廃止され

EAGLContext *k_context = [[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1 sharegroup:[[[[Director sharedDirector] openGLView] context] sharegroup]] autorelease]; 
[EAGLContext setCurrentContext:k_context]; 

:レコードの

3

は、新しいスレッドを同時実行スレッドからOpenGLのAPIを使用できるようにするには、次の2行を実行する必要がありますTextureMgrクラスのCocos2D 0.8.x以降では、非同期テクスチャ読み込みが行われます。