交換鏈結

交換鏈結是用來向使用者顯示畫面格的緩衝區集合。 每當應用程式在螢幕上呈現新的畫面格時,交換鏈結中的第一個緩衝區就會取代已顯示的緩衝區。 此程序稱又稱為交換或翻轉

圖形卡具有一個指向表面的指標,而該表面則代表要在螢幕上顯示的影像,也就是所謂的「前端緩衝區」。 當應用程式重新整理時,圖形卡會將前端緩衝區的內容傳送至要用來顯示的顯示器。 不過,在轉譯即時圖形時,這將造成「截斷」問題。 問題的根源在於:相較於電腦的其他部分,螢幕的重新整理速率顯得十分慢。 常見的重新整理速率範圍為 60 Hz (每秒 60 次) 至 100 Hz。

如果應用程式正在更新前端緩衝區,而螢幕只更新到一半,則顯示的影像將切成兩半,上半部會包含舊的影像,而下半部則包含新的影像。 這個問題就是所謂的「截斷」

避免截斷

Direct3D 會實作兩個選項來避免截斷:

  • 第一個選項是僅允許使用垂直追溯 (或垂直同步) 作業來更新螢幕。 螢幕通常會透過水平移動光針,從螢幕左上角到右下角進行 Z 字形移動,藉此重新整理其影像。 當光針到達最下方後,螢幕就會將其移回左上角以重新校準光針,以便再次展開程序。

    這項重新校準作業就是所謂的「垂直同步」。在垂直同步期間,螢幕將不會顯示任何內容,因此,在螢幕開始再次繪製之前,將看不到發生在前端緩衝區的任何更新。 垂直同步的運作速度相對緩慢;不過,卻又不足以慢到能等候複雜場景轉譯完畢。 因此,避免截斷且順利轉譯複雜場景的必要方法,就是使用名為「後端緩衝」的程序。

  • 另一個選項,就是使用名為「後端緩衝」的技術。 後端緩衝是將場景繪製至螢幕外表面的程序,該表面又稱為「後端緩衝區」。 前端緩衝區以外的任何表面都會視為螢幕外表面,因為該表面永遠不會直接顯示在螢幕中。

    只要使用後端緩衝區,應用程式就能在系統閒置 (也就是沒有任何等候中的視窗訊息) 時自由轉譯場景,且無需考量螢幕的重新整理速率。 後端緩衝會衍生額外的複雜度:如何且何時要將後端緩衝區移至前端緩衝區。

表面翻轉

將後端緩衝區移至前端緩衝區的程序,就是所謂的「表面翻轉」。 由於圖形卡只會使用指向表面的指標來代表前端緩衝區,只要進行簡單的指標變更,即可將後端緩衝區設為前端緩衝區。 當應用程式要求 Direct3D 將後端緩衝區呈現至前端緩衝區時,Direct3D 只會「翻轉」兩個表面指標。 因此,後端緩衝區現在會變成新的前端緩衝區,而舊的前端緩衝區則會變成新的後端緩衝區。

每當應用程式要求 Direct3D 裝置呈現後端緩衝區時,就會叫用表面翻轉;不過,Direct3D 也可進行設定,以將要求加入佇列,直到發生垂直同步為止。 這個選項又稱為 Direct3D 裝置的呈現間隔。 視應用程式指定的 Direct3D 表面翻轉方法而定,新後端緩衝區中的資料可能無法重複使用。

表面翻轉為多媒體、動畫和遊戲軟體中的重要關鍵;相當於使用一疊紙張呈現動畫一般。 藝術家會在每一頁稍加變更繪圖,這樣一來,快速翻動每一頁時,繪圖就會顯示為動畫。

裝置