1

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

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

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

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

4

1 回答 1

2

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

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

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

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

于 2012-08-11T00:17:00.943 回答