Cocos,如何从后台线程渲染到CCRenderTexture

时间:2011-07-03 23:36:19

标签: multithreading ios opengl-es cocos2d-iphone

我有一个渲染循环,我想在后台运行,这样我就可以控制播放循环的速度,使其无论是慢速还是快速动画。现在我正在使用sleep并在每次我想使用sprite时调用主线程中的CCRenderTexture开始和结束:

[self performSelectorOnMainThread:@selector(visit) withObject:nil waitUntilDone:YES];

- (void)visit {
    [target begin];
    [[self.currentLine.brush sprite] visit];
    [target end];
}

这是一个让它工作的黑客,但当然让它运行得很慢。在后台线程中调用begin和end只会导致无法呈现任何内容

我希望能够调用begin,在后台线程中完成所有绘图,然后调用end,但我尝试过的所有内容都没有做任何事情或者让EAGLView翻转。

1 个答案:

答案 0 :(得分:1)

CCRenderTexure的工作原理是将opengl输出重定向到自身,以便完成的绘图保存在精灵上。这意味着,在一次操作中,您需要拨打begin来完成所有绘图,然后拨打end

当在后台线程上运行时,CCDirector正在主线程中进行自己的绘制调用,这样当你调用begin并尝试在该状态下执行多个函数时,导演也会画出各种奇怪的东西错误。

在正常渲染操作恢复之前,需要调用

end