ios - 当我调用 glFinish() 时,这是否意味着 OpenGL ES 会忽略进一步的调用,直到我调用 -setCurrentContext :?

标签 ios opengl-es concurrency

OpenGL ES Programming Guide他们说:

To summarize, your app needs to call the glFinish function to ensure that all previously submitted commands are drained from the command buffer and are executed by OpenGL ES. After it moves into the background, you must avoid all use of OpenGL ES until it moves back into the foreground.

glFinish 是否使 OpenGL ES 忽略所有进一步的函数调用?

或者您还有什么其他方法可以防止您的应用在开始过渡到后台后调用 OpenGL ES 函数?

问题是,如果您使使用 GCD 串行队列触发异步绘图的计时器无效,那么 block 仍然会在进入后台的过程中完成其工作。

最佳答案

glFinish() 将阻塞,直到之前对 OpenGL ES 的所有调用都已完成其功能,从而清除挂起的任务。在执行任何屏幕截图之前调用此函数通常很有帮助。

要在应用程序进入后台时避免 GL 调用,非常简单,而且更多取决于您实现游戏循环的方式。在我们的游戏中,我们使用 bool 变量“isAppActive”,当应用程序进入后台状态时将触发该变量。如果此变量为真,则不会调用游戏循环中的 Draw() 函数。从而避免所有 GL 调用。

关于ios - 当我调用 glFinish() 时,这是否意味着 OpenGL ES 会忽略进一步的调用,直到我调用 -setCurrentContext :?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19215798/

相关文章:

java - OpenGL ES 渲染错误

java - 对象创建(状态初始化)和线程安全

google-app-engine - 使用 Golang channel 处理 HTTP 请求

ios - 使用 ARC 的线程安全设计

ios - 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法在捆绑软件中加载NIB:'NSBundle

在谷歌地图上加载标记的自定义信息窗口时,iOS 应用程序卡住

Java多线程执行器InvokeAll问题

ios - 从 'NSManagedObject Subclass*' 分配给 'NSEntityDescription *' 的不兼容指针类型

android - 使用 C++(OpenGL ES 1.x) 加载纹理数据

iphone - 为什么我的 OpenGL ES View 在 iOS 4.3 上有时是空白的?