我有一个用于我正在开发的iPhone的OpenGL ES应用程序,是另一个平台的面向二维应用程序的端口.出于性能原因,我选择使用OpenGL ES渲染图形.但是,主应用程序在一个单独的线程上运行(由于原始的应用程序设计),所以从我的app委托中我执行此操作:
- (void) applicationDidFinishLaunching:(UIApplication *)application {
CGRect rect = [[UIScreen mainScreen] bounds];
glView = [[EAGLView alloc] initWithFrame:rect];
[window addSubview:glView];
// launch main application in separate thread
[NSThread detachNewThreadSelector:@selector(applicationMainThread) toTarget:self withObject:nil];
}
Run Code Online (Sandbox Code Playgroud)
但是,我注意到applicationMainThread中试图向屏幕呈现内容的任何调用都不会呈现任何内容,直到该线程终止.
我在子应用程序线程上设置了实际的OpenGL ES上下文,而不是UI线程.如果我这样做:
- (void) applicationMainThread {
CGRect rect = [[UIScreen mainScreen] bounds];
[glView createContext]; // creates the open GL ES context
//Initialize OpenGL states
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glMatrixMode(GL_PROJECTION);
glOrthof(0, rect.size.width, 0, rect.size.height, -1, 1);
glMatrixMode(GL_MODELVIEW);
Texture2D *tex = [[Texture2D alloc] initWithImage:[UIImage …Run Code Online (Sandbox Code Playgroud)