首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cocos2D-iPhone多线程OpenGL编程

Cocos2D-iPhone多线程OpenGL编程
EN

Stack Overflow用户
提问于 2009-07-15 18:32:54
回答 4查看 7.9K关注 0票数 9

为了尝试为我正在开发的iPhone游戏创建一个加载栏(使用Cocos2D),我想使用多线程方法。

一个线程显示一个加载屏幕并运行主应用程序事件循环,而一个新线程在后台(通过spriteWithFile)并将它们添加到一个层)中静默地加载所有Sprite。

我使用NSThread的detachNewThreadSelector方法创建新线程(它通过performSelectorOnMainThread).向主线程发送加载状态的更新)

我面临的问题是,新线程中的任何spriteWithFile调用(例如在OpenGL方法中找到的调用)都会出现总线错误或某种类型的内存访问错误。我假设这是因为两个线程同时尝试进行OpenGL调用,或者新线程不知道OpenGL上下文。

要允许多个线程使用Cocos2D-iPhone在OpenGL上调用iPhone,必须做些什么。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-07-15 22:57:15

我也想这么做。

我从这条线开始。

PS:这个答案很古老,现在我不确定异步纹理加载是否像以前那样有用,因为iOS5通过CVOpenGLESTextureCaches添加了“免费”纹理上传。当然,您仍然可以(&应该)将资产加载到第二个线程中,但是给该线程一个EAGLContext现在似乎不那么必要了。

票数 2
EN

Stack Overflow用户

发布于 2010-01-19 13:22:17

对于记录而言,新线程需要执行以下两行代码才能从并发线程中使用OpenGL API:

代码语言:javascript
复制
EAGLContext *k_context = [[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1 sharegroup:[[[[Director sharedDirector] openGLView] context] sharegroup]] autorelease];
[EAGLContext setCurrentContext:k_context];

现在,addImageAsync方法已经过时,该方法是由为您加载异步纹理的TextureMgr类在Cocos2D 0.8.x中提供的。

票数 3
EN

Stack Overflow用户

发布于 2009-07-16 00:35:23

苹果对于多线程OpenGL 这里有一些很好的指导方针。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1133123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档