2011-12-03 33 views
0

我在我的iPhone应用程序中加载3D模型。因为模型可能很大,我想在另一个线程中加载它。我调用detachNewThreadSelector来产生新的线程,并简单地在那里移动模型加载调用。模型加载但它没有纹理。当我在调试器中检查时,我发现glGenTextures调用不会创建新的名称/ ID(它在0处保持可变)。使用detachNewThreadSelector在另一个线程中加载纹理

如果我将我的函数调用移动到主线程一切正常。当你创建一个OpenGL上下文,并在上下文是由电流只有一个线程

回答

1

的OpenGL才能正常运行,因此使用OpenGL在另一个线程,你已经创建线程另一个上下文,并使其在该线程当前。

而且它通常以共享资源(通过类似于wglShareLists东西)上下文之间。

+0

很抱歉忘了提及 - 这是在iPhone上的OpenGL ES上。有没有例子? –

0

我是用sharegroup做的。下面是代码为我做:

主线程:

[NSThread detachNewThreadSelector:@selector(负载:) toTarget:[AsynchModelLoader类] withObject:自我]。

产生的线程:

+(无效)负载:(ID)PARAM {
NSAutoreleasePool *池= [[NSAutoreleasePool的alloc] INIT];
ModelViewer * mview =(ModelViewer *)param;

EAGLContext * aContext = [[EAGLContext的alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1 sharegroup:mview.context.sharegroup];
[EAGLContext setCurrentContext:aContext];

mview.lib = [进口商fromResource:@ “的Model3D”];

[pool drain]; }

相关问题