2014-11-14 40 views
0

如果我將Direct3D9中的表示間隔設置爲D3DPRESENT_INTERVAL_ONE,那麼當我調用Present時,它將等待顯示器更新。它總是等待正確的數量,並且(可能)不使用自旋鎖。D3D9的演示間隔如何工作?

我希望能夠做到與Direct3D9中一樣的「等待」,但我不想使用Direct3D。如何在不使用螺旋鎖的情況下完全等待vsync?可以在沒有Direct3D的情況下編程嗎?

回答

1

與垂直回掃同步由驅動程序以設備相關的方式處理。不可思議的是,有一些實現只是忙於等待,輪詢一些設備寄存器直到它檢測到回掃間隔的開始。另一種方法是休眠等待設備中斷,這會釋放CPU的其他任務,但由於必要的內核模式/用戶模式轉換而增加延遲。司機也可以通過估計回溯時間來實現混合方法,睡眠時間稍短一點,然後忙於等待。

我不知道這三種可能的實現中哪種是典型的,但它並不重要。 Windows不提供任何獨立於設備的方式來使Windows應用程序與DirectX之外的虛擬回溯同步(我猜測OpenGL)。與視頻卡驅動程序不同,應用程序不能直接訪問硬件,因此不能讀取設備寄存器,也不能請求或處理中斷。