CCSprite.draw 在 CCRenderTexture in thread 上不起作用 (iOS cocos2d 2.0 rc2)



我正在尝试绘制线程中的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时。如果它在屏幕上绘制,则工作正常。

有什么想法可以解决这个问题吗?提前感谢!

您只能在创建 cocos2d OpenGL 视图 (CCGLView) 的同一线程上绘制,这通常是主线程。这也是为什么调度到主队列可以解决问题的原因,但它也会阻止相关代码的并行执行,因为它现在在主线程上运行。

如果要通过使用多个线程来加快速度,请考虑并行化应用的其他算法,例如寻路、AI 或其他关键代码路径等游戏逻辑。

最新更新