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

标签 multithreading ios opengl-es cocos2d-iphone

我有一个渲染循环,我想在后台运行,以便我可以控制播放循环的速度,使其动画缓慢或快速。现在,每次我想使用 Sprite 时,我都会使用 sleep 并在主线程中的 CCRenderTexture 上调用 begin 和 end:

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

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

这是一个让它工作的黑客,但当然使它运行非常慢。在后台线程中调用 begin 和 end 只会导致根本不渲染任何内容

我希望能够调用 begin,在后台线程中完成所有绘图,然后调用 end,但我尝试过的所有操作要么什么也没做,要么使我的 EAGLView 崩溃。

最佳答案

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

当在后台线程上运行时,CCDirector 会在主线程中进行自己的绘制调用,因此当您调用 begin 并尝试在该状态下执行多个函数时,director 也会绘制,从而导致所有各种奇怪的错误。

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

关于multithreading - Cocos,如何从后台线程渲染到CCRenderTexture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566211/

相关文章:

c++ - c++中线程的实现

ios - 如何使用 Objective-C 填写 HTML 表单

c++ - 线和 3D 模型相交

java - Java中如何立即停止一个线程

linux - 在 linux 中使用命令行检查单个线程优先级

在应用程序中但不在主屏幕上收到 iOS 推送通知

ios - 带 GLKView 的核心图像

ios - opengl es2 预乘与直接 alpha + 混合

c++ - pre-main 全局初始化程序是否保证运行单线程?

ios - UITableViewCell 的动态高度无法正常工作