[英]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.