Gamma 控制項 (Direct3D 9)

Gamma 控制項可讓您變更系統顯示表面內容的方式,而不會影響表面本身的內容。 將這些控制項視為 Direct3D 套用至資料非常簡單的篩選準則,因為它離開表面並在螢幕上轉譯之前套用。

Gamma 控制項是交換鏈結的屬性。 Gamma 控制項可讓您動態變更表面紅色、綠色和藍色層級如何對應至系統顯示的實際層級。 藉由設定 gamma 層級,您可以讓使用者的畫面閃爍色彩 - 當使用者的字元被擷取時為紅色,當字元挑選新專案時為綠色,依此類而不需要將新影像複製到畫面緩衝區以達到效果。 或者,您可以調整色彩等級,以將色彩偏差套用至後端緩衝區中的影像。

每個裝置一律至少有一個交換鏈結 (隱含交換鏈結) ,因為 Direct3D 9 有一個交換鏈結做為裝置的屬性。 因為 gamma 坡形是交換鏈結的屬性,所以當交換鏈結視窗化時,可以套用 gamma 坡形。 gamma 坡形會立即生效。 沒有等候垂直同步作業。

SetGammaRampGetGammaRamp方法可讓您在傳送到數位對類比轉換器 (DAC) 顯示之前,操作會影響表面圖元的紅色、綠色和藍色色彩元件的坡道層級。

Gamma 坡形層級

在 Direct3D 中,gamma 斜線一詞描述一組值,這些值會將特定色彩元件的層級 - 紅色、綠色、藍色 - 對應至 DAC 接收的新層級,以供顯示之 DAC 接收。 重新對應是透過三個查閱資料表來執行,每個色彩元件各一個。

以下是其運作方式:Direct3D 會從框架緩衝區取得圖元,並評估其個別紅色、綠色和藍色的元件。 每個元件都會以介於 0 到 65535 之間的值來表示。 Direct3D 會取得原始值,並使用它來編制 256 元素陣列的索引, (斜線) ,其中每個元素都包含取代原始值的值。 Direct3D 會針對畫面緩衝區中每個圖元的每個色彩元件執行這項查閱和取代程式,藉此變更所有螢幕上圖元的最終色彩。

藉由繪製坡形值來視覺化,這十分方便,如下列兩個圖表所示。 左圖表顯示完全不會修改色彩的坡形。 右側圖表顯示斜線,會對套用它的色彩元件施加負面偏差。

gamma 坡形值的圖表

左邊圖形的陣列元素包含與索引相同的值 - 索引 0 的元素,而索引 255 的元素則為 65535。 這種類型的坡形是預設值,因為它不會在顯示輸入值之前變更。 右側圖表提供更多變化;其坡形包含值,範圍從第一個專案中的 0 到最後一個元素中的 32768,值範圍介於 兩者之間。 效果是使用此坡形的色彩元件會在顯示器上顯示為靜音。 您不限於使用線性圖形;如果您的應用程式可以視需要指派任意對應,則為 。 您甚至可以將專案設定為所有零,以完全從顯示器中移除色彩元件。

設定和擷取 Gamma 坡形層級

Gamma 坡形層級實際上是 Direct3D 用來將框架緩衝區色彩元件對應至將顯示的新層級的查閱資料表。 您可以呼叫 SetGammaRampGetGammaRamp 方法,來設定和擷取主要表面的坡形層級。 SetGammaRamp 接受兩個參數, 而 GetGammaRamp 接受一個參數。 針對 SetGammaRamp,第一個參數是D3DSGR_CALIBRATE或D3DSGR_NO_CALIBRATION。 第二個參數 pRamp 是 D3DGAMMARAMP 結構的指標。 D3DGAMMARAMP結構包含三個 WORD 的 256 個元素陣列,每個陣列各包含紅色、綠色和藍色 Gamma 坡道。 GetGammaRamp 有一個參數,其會採用 D3DGAMMARAMP 類型的指標,該類型會填入目前的 gamma 坡形。

您可以包含 SetGammaRamp 第一個參數的D3DSGR_CALIBRATE值,以在設定新的 gamma 層級時叫用校正器。 校正 Gamma 坡形會產生一些處理額外負荷,不應經常使用。 無論顯示器介面卡和監視器為何,設定校正的 Gamma 坡形都會為使用者提供一致且絕對的 gamma 值。

並非所有系統都支援 gamma 校正。 若要判斷是否支援 gamma 校正,請呼叫 GetDeviceCaps,並在方法傳回之後檢查相關聯 D3DCAPS9 結構的 Caps2 成員。 如果D3DCAPS2_CANCALIBRATEGAMMA功能旗標存在,則會支援 gamma 校正。

設定新的坡形層級時,請記住,只有在應用程式處於全螢幕、獨佔模式時,才會使用您在陣列中設定的層級。 每當應用程式變更為一般模式時,斜線層級會保留,當應用程式恢復全螢幕模式時,就會再次生效。

如果裝置不支援交換鏈結目前簡報模式中的 gamma 坡形, (全螢幕或視窗化) ,則不會傳回任何錯誤值。 應用程式可以檢查 D3DCAPS9 類型 Caps2 成員中的D3DCAPS2_FULLSCREENGAMMA和D3DCAPS2_CANCALIBRATEGAMMA功能位,以判斷裝置的功能,以及是否已安裝校正器。

Direct3D 表面