繁体   English   中英

如何在glkview中使用dispatch_async?

[英]How to use dispatch_async in glkview?

我正在学习如何在我的iOS Opengl-es应用程序中使用线程。 我试图修改opengl游戏模板代码:

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBindVertexArrayOES(_vertexArray);

    // Render the object with GLKit
    [self.effect prepareToDraw];

    glDrawArrays(GL_TRIANGLES, 0, 36);

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        sleep(1);
        dispatch_async(dispatch_get_main_queue(), ^{
            // Render the object again with ES2
            glUseProgram(_program);

            glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, _modelViewProjectionMatrix.m);
            glUniformMatrix3fv(uniforms[UNIFORM_NORMAL_MATRIX], 1, 0, _normalMatrix.m);

            glDrawArrays(GL_TRIANGLES, 0, 36);
        });
    });
}

如果运行良好,它将以60fps的速度绘制一个框,如果工作良好,则以1fps的速度绘制一个框,但是当我运行上述代码时,它只会绘制一个框。

我在网上搜索,找不到导致问题的原因。

非常感谢您的帮助!

调度块中的代码将无法正常工作。 到执行时,该帧的所有OpenGL状态早就被销毁了。 如果您要在该代码块中调用glGetError(),我相信它会告诉您相同的信息。 您需要确保所有绘画代码均在该glkView方法中完成,以使OpenGL状态有效。 执行该分派时,实际上是在使该绘图代码的执行脱离该方法的范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM