快速總結是,您可能會在Present()中看到等待,但它確實取決於Present()調用的內容。一般情況下,除非你明確說你需要注意GPU何時完成,否則最終可能會等待(隨機)你的驅動程序的輸入緩衝區填滿。將GPU驅動程序&卡想象成非常長的管道。你可以在一端工作,並在一段時間後出現在顯示器上。在填充之前,您可能能夠將幾幀的命令放入管道中。該卡可能需要花費很多時間繪製原始圖元,但您可能會看到CPU在幾幀後的某個點處等待。
如果您的Present()調用包含glFinish()的等價物,那麼整個管道必須在該調用返回之前耗盡。所以,CPU將在那裏等待。
希望下面可以幫助:
Clear();
導致當前緩衝區中的所有像素變色,所以GPU做 工作。查看你的GPU的清晰pix /秒的速率,看看這應該是什麼時間。
SetBuffers();
SetTexture();
駕駛員可以在這裏做了一些工作,但一般要等到你 其實並繪製使用這個新的數據。在任何情況下,GPU在這裏都不會做 。
DrawPrimitives();
現在這裏是在GPU應該做的大部分工作。根據原始大小,您將受頂點/秒或像素/秒的限制。也許你有 昂貴的着色器,你會受到着色器指令/秒的限制。
但是,您可能不會將此視爲CPU正在等待的位置。驅動程序 可能會爲您緩衝這些命令,並且CPU可能會繼續運行。
Present();
此時,GPU的工作量很小。它只是改變一個指針開始從不同的緩衝區顯示。
但是,這可能是出現到CPU的位置,以等待它在GPU上。根據你的API,「Present()」可能包含諸如glFlush()或glFinish()之類的東西。如果是這樣,那麼你可能會在這裏等。
如果不知道你在詢問什麼操作系統,就不能回答這個問題 – 2009-12-27 01:23:26
那會是windows-XP向上的 – 2009-12-27 01:30:25