GLES 2.0在Android和iOS上调用同步还是异步? 它何时会阻止CPU并等待GPU完成发送的命令? 我相信glReadPixels和glGetTexImage肯定会阻塞线程并等待所有gl命令完成。
经过一些测试后,我觉得多线程应用甚至可以在单核设备上获得性能,因为GL调用是同步的,GPU会阻塞CPU。
在iOS和Android上是否有任何参考gl *调用是同步的。 我知道一般来说它不是同步的。
有两个线程是否有意义:一个线程进行GL调用,另一个线程运行物理,以便在GL阻塞主线程时给CPU一些工作?
答案 0 :(得分:2)
大多数OpenGL命令不会阻止程序的执行。任何设置状态或发出绘制调用的东西只是将命令放入GPU pushbuffer并立即返回。您不必等待命令到达GPU,也不必等待模型在下一个命令发出之前完成绘图。
例外是从GPU请求状态的任何事件,例如glGet.../glRead...
操作。这需要GPU刷新它的指令队列,以便它可以向您返回正确的值。这些可能导致冗长的停顿,因此建议根据需要谨慎使用。
有两个线程是否有意义:一个线程进行GL调用,另一个线程运行物理,以便在GL阻塞主线程时给CPU一些工作?
这取决于。通常,如果您在等待GPU停滞,那是因为您需要立即获得一些值来继续计算。如果你可以在后台完成不依赖于此的工作,那么将它卸载到另一个线程是有意义的。