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) 的同一线程上绘图,这通常是主线程。这也是为什么调度到主队列解决了这个问题,但它也阻止了有问题的代码的并行执行,因为它现在在主线程上运行。

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

于 2012-06-30T12:11:40.853 回答