android - GLES iOS、Android RenderBuffer 同步还是异步?

标签 android ios opengl-es asynchronous opengl-es-2.0

GLES 2.0 调用在 Android 和 iOS 上是同步的还是异步的? 它什么时候会阻塞 CPU 等待 GPU 完成发送的命令? 我相信 glReadPixels 和 glGetTexImage 肯定会阻塞线程并等待所有 gl 命令完成。

经过一些测试后,我觉得即使在单核设备上多线程应用程序也可能获得性能,因为 GL 调用是同步的并且 GPU 会阻塞 CPU。

在 iOS 和 Android 上是否有任何引用 gl* 调用是否同步。 我知道一般来说它不是同步的。

有 2 个线程是否有意义:一个线程进行 GL 调用,另一个线程运行物理以在 GL 阻塞主线程时为 CPU 提供一些工作?

最佳答案

大多数 OpenGL 命令不会阻止程序的执行。任何设置状态或发出绘制调用的操作都只是将命令放入 GPU 推送缓冲区并立即返回。您不必等待命令到达 GPU,或等待模型完成绘制才能发出下一个命令。

异常(exception)是从 GPU 请求状态的任何操作,例如 glGet.../glRead... 操作。这需要 GPU 刷新它的指令队列,以便它可以向您返回正确的值。这些可能会导致长时间停顿,因此建议根据需要谨慎使用。

Does it make sense to have 2 threads: one thread to make GL calls and other thread to run physics to give CPU some work when GL blocks main thread ?

这取决于。一般来说,如果您正在等待 GPU,那是因为您立即需要获取一些值以继续您的计算。如果您可以在后台执行不依赖于此的工作,则将其卸载到另一个线程是有意义的。

关于android - GLES iOS、Android RenderBuffer 同步还是异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11910363/

相关文章:

Android ndk 和动态加载库与 dlopen

android - 包裹解码未知类型代码

java - 按下警报对话框按钮始终返回 0 值

ios - 在 Firebase 数据库中查找对象

android - 暂停查看绘图顺序问题

android - 防止 "Never ask again"触发 Ionic/Cordova 的暂停/恢复

objective-c - NSURL 隐藏方法 queryParameters 可能会覆盖类别

iOS - 使用我的应用程序用户界面在应用程序中嵌入视频

iphone - 最小化 OpenGl es 中的 glDrawArray 调用

android - 使用 NDK 编译链接(未复制)文件