2012-08-10 173 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

相關問題