2012-08-10 123 views
1

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

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

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

是否有意义有2个线程:一个线程使GL调用和其他线程运行物理学给CPU一些工作时,GL阻塞主线程?

回答

2

大多数OpenGL命令不会阻止程序的执行。任何设置状态或发出绘制调用的东西只是在GPU pushbuffer中放入一个命令并立即返回。您不必等待命令到达GPU,或者在下一个命令发出之前让模型完成绘制。

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

是否有意义有2个线程:一个线程使GL调用和其他线程运行物理学给CPU一些工作时,GL阻塞主线程?

这取决于。一般来说,如果您在等待GPU的停滞,那是因为您需要立即获得一些价值才能继续进行计算。如果有工作可以在不依赖于此的背景中进行,那么将其卸载到另一个线程是有意义的。

+0

RenderBuffer的操作是否异常并且阻塞?我做离屏渲染,然后使用该图像作为纹理在不同的缓冲区中渲染。这样的操作可能会阻塞主线程吗?尤其是在iOS和Android等移动应用上?谢谢 – Max 2012-08-11 14:13:33

相关问题