0

CCRenderTextureスレッド内に描画しようとしています。私が持っている:

EAGLSharegroup *sharegroup = [[[[CCDirector sharedDirector] openGLView] context] sharegroup];
EAGLContext *k_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 sharegroup:sharegroup];
[EAGLContext setCurrentContext:k_context];

スレッドの先頭に。以外はすべて機能しましCCSprite.drawた。レンダー テクスチャを次のようにテストしました。

[rt beginWithClear:1 g:1 b:1 a:1];
[sprite visit];
[rt end];

呼び出し[CCSprite visit]てもスプライトは描画されません。 glGetErrorすべてのステップで 0 を返します。

この問題をさらに調査するために、UI スレッドにすべてを配置し、コンテキスト呼び出しを削除しました。同じコードでスプライトが正しく描画されていることがわかります。また、このスプライトをシーンに追加して、スプライトが正しいことも確認しました。

また、スレッドを使用しない場合でも、上記の「コンテキスト設定呼び出し」を配置するとCCSprite.draw、動作が停止しますが、CCRenderTexture. 画面に描画している場合は正常に動作します。

この問題を解決する方法はありますか? 前もって感謝します!

4

1 に答える 1

0

cocos2d OpenGL ビュー (CCGLView) が作成された同じスレッドでのみ描画できます。これは通常、メイン スレッドです。これが、メイン キューへのディスパッチによって問題が修正される理由でもありますが、問題のコードがメイン スレッドで実行されるようになったため、並列実行も妨げられます。

複数のスレッドを使用して速度を上げたい場合は、パスファインディング、AI、その他の重要なコード パスなどのゲーム ロジックなど、アプリの他のアルゴリズムを並列化することを検討してください。

于 2012-06-30T12:11:40.853 に答える