共用方式為


什麼是交換鏈結? (Direct3D 9)

交換鏈結是用來向用戶顯示畫面的緩衝區集合。 每次應用程式顯示新的畫面格以顯示時,交換鏈結中的第一個緩衝區會取代顯示緩衝區的位置。 此過程被稱為交換或翻轉。

圖形配接器會保存一個指向圖層的指標,該圖層代表顯示在監視器上的影像,稱為前緩衝區。 當畫面更新時,顯示卡會將前端緩衝區的內容傳送到監視器上顯示。 不過,這會導致轉譯即時圖形時發生問題。 問題的核心是,相較於計算機的其餘部分,監視器重新整理速率非常慢。 常見的重新整理速率範圍從每秒 60 Hz(每秒 60 次)到 100 Hz。 如果您的應用程式在監視器正在刷新時更新前緩衝區,顯示的影像將會被切成兩半,上半部顯示舊影像,而下半部顯示新影像。 這個問題稱為撕裂。

Direct3D 會實作兩個選項,以避免撕裂:

  • 選項,只允許在垂直回溯(或垂直同步)作業上更新監視器。 監視器通常會透過水平掃描的光點來刷新影像,光點從監視器左上方以之字形移動,最後到達右下角。 當光針到達底部時,螢幕會將光針移回左上方以重新校準,使進程可以再次啟動。 此重新調整稱為垂直同步處理。在垂直同步處理期間,監視器不會繪製任何內容,因此在監視器開始再次繪製之前,不會看到前緩衝區的任何更新。 垂直同步的速度相對較慢;然而,還不足以在等候時呈現複雜的場景。 避免撕裂且能夠轉譯複雜場景所需的是稱為「備份緩衝」的程式。
  • 使用稱為「後台緩衝」的技術的選項。 後置緩衝是將場景繪製到螢幕外表面的過程,稱為後置緩衝區。 請注意,前端緩衝區以外的任何表面稱為螢幕外表面,因為它永遠不會由監視器直接檢視。 藉由使用後緩衝區,應用程式可以隨意地渲染場景,只要系統閒置(也就是說,沒有視窗訊息正在等候),而不需要考慮顯示器的刷新率。 Back buffering 帶來了額外的複雜性,涉及如何以及何時將後端緩衝區移動到前端緩衝區。

將後台緩衝區移至前端緩衝區的程序稱為表面翻轉。 由於圖形卡僅使用指標指向的平面來代表前端緩衝區,因此只需簡單地更改指標即可將後端緩衝區設為前端緩衝區。 當應用程式要求 Direct3D 將後台緩衝區呈現至前端緩衝區時,Direct3D 只會「翻轉」這兩個表面指標。 結果是後端緩衝區現在是新的前端緩衝區,而舊的前端緩衝區是新的後端緩衝區。 每當應用程式要求 Direct3D 裝置呈現後台緩衝區時,就會叫用表面翻轉;不過,Direct3D 可以設定為將要求排入佇列,直到發生垂直同步為止。 此選項稱為 Direct3D 裝置的簡報間隔。 請注意,根據應用程式如何指定 Direct3D 應該如何處理表面翻轉,新後台緩衝區中的數據可能無法重複使用。 表面翻轉是多媒體、動畫和遊戲軟體的關鍵;這相當於您可以使用紙張墊做動畫的方式。 在每個頁面上,藝術家會稍微變更角色,這樣當你快速翻閱頁面時,繪圖會呈現動畫效果。

Direct3D 曲面

翻轉表面 (Direct3D 9)