How to use dispatch_async in glkview?

I am learning how to use streams with my Opengl-es iOS app. I tried changing the opengl game template code:

- (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);
        });
    });
}

It draws a field at 60 frames per second and the other at 1 fps if it works well, but when I run the code above, it only displays one square.

I searched the Internet and cannot find the cause of the problem.

Thanks so much for any help!

0
source share
1 answer

. , , OpenGL . glGetError() , , . , , glkView OpenGL . , .

+1

All Articles