我正在尝试创建在单独线程中运行的游戏循环。我决定使用NSThread
object 而不是CADisplayLink
and NSTimer
。
为了测试是否OpenGLES
正常工作,我用纯色清除屏幕。
这里的问题是一切正常,没有循环,来自initWithFrame
. 但是当我将渲染代码放入游戏循环中,或者只是创建新线程并从新线程调用渲染代码时,屏幕上什么也没有发生。
这是我initWithFrame
从AppDelegate
's调用的函数didFinishLaunchingWithOptions
:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
[self setupLayer];
[self setupContext];
[self setScaleFactor];
[self initGame];
[NSThread detachNewThreadSelector:@selector(render) toTarget:self withObject:nil];
}
return self;
}
这是渲染功能:
- (void)render
{
glClearColor(1.0f, 0.0f, 1.0f, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
[context presentRenderbuffer:GL_RENDERBUFFER];
}
如果我把渲染调用而不是在里面创建线程initWithFrame
,一切正常。但是在当前的实现中,我得到了黑屏,尽管调用了渲染函数。我也尝试过使用
NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(render) object:nil];
[thread start];
它也不会出现粉红色的屏幕。
感谢任何建议如何使用线程将 OpenGL ES 渲染到屏幕上。