小编Gab*_*iel的帖子

如何立即更新iPhone OpenGL ES上下文?

我有一个用于我正在开发的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)

iphone multithreading opengl-es objective-c

4
推荐指数
1
解决办法
3781
查看次数

标签 统计

iphone ×1

multithreading ×1

objective-c ×1

opengl-es ×1