Gamma 控件 (Direct3D 9)
Gamma 控制項可讓您變更系統顯示表面內容的方式,而不會影響表面本身的內容。 將這些控件視為 Direct3D 套用至數據非常簡單的篩選,因為它會離開表面,並在在螢幕上呈現之前套用數據。
Gamma 控件是交換鏈結的屬性。 Gamma 控制項可讓您動態變更表面的紅色、綠色和藍色層級如何對應至系統顯示的實際層級。 藉由設定 gamma 層級,您可以讓使用者的畫面閃爍色彩 - 當使用者的字元被拍攝時為紅色、字元挑選新專案時為綠色等-而不將新的影像複製到畫面緩衝區以達到效果。 或者,您可以調整色彩層級,以將色彩偏差套用至後台緩衝區中的影像。
每個裝置一律至少有一個交換鏈結(隱含交換鏈結),因為 Direct3D 9 有一個交換鏈結做為裝置的屬性。 由於 gamma 坡形是交換鏈結的屬性,因此當交換鏈結視窗化時,可以套用伽瑪坡形。 伽瑪坡道會立即生效。 沒有等候垂直同步作業。
SetGammaRamp 和 GetGammaRamp 方法可讓您在將圖元從表面傳送到數位對模擬轉換器 (DAC) 以顯示之前,作影響紅色、綠色和藍色圖元元件的坡形層級。
Gamma 坡形層級
在 Direct3D 中,Gamma 坡形一詞描述一組值,這些值會將框架緩衝區中所有圖元的層級對應至 DAC 所接收的新層級,以顯示。 重新對應是透過三個查閱數據表來執行,每個色彩元件各一個。
以下是其運作方式:Direct3D 會從畫面緩衝區取得圖元,並評估其個別的紅色、綠色和藍色元件。 每個元件都會以介於 0 到 65535 之間的值來表示。 Direct3D 會取得原始值,並用它來編製 256 元素陣列的索引(坡形),其中每個元素都包含取代原始值的值。 Direct3D 會針對畫面緩衝區中每個圖元的每個色彩元件執行此查閱和取代程式,藉此變更所有螢幕上圖元的最終色彩。
透過繪製斜坡值來可視化是很方便的,如下列兩個圖表所示。 左圖顯示坡道完全不會修改色彩。 右圖顯示斜坡,會對套用色彩元件的負偏差。
圖表
左邊圖表的陣列元素包含的值與其索引相同 - 索引 0 的元素中為 0,而索引 255 的元素則為 65535。 這種類型的坡道是預設值,因為它不會在顯示輸入值之前變更輸入值。 右側圖表提供更多變化;其坡形包含值,範圍從第一個元素中的 0 到最後一個專案的 32768,值介於兩者之間的一致範圍。 效果是使用此坡道的色彩元件在顯示器上顯示為靜音。 您不限於使用線性圖形;如果應用程式可以視需要指定任意對應, 則為 。 您甚至可以將項目設定為所有零,以完全從顯示器移除色彩元件。
設定和擷取 Gamma 坡形層級
Gamma 坡形層級實際上是 Direct3D 用來將框架緩衝區色彩元件對應至將顯示之新層級的查閱數據表。 您可以呼叫 setGammaRampGetGammaRamp 方法來設定和擷取主要介面的坡形層級。 SetGammaRamp 接受兩個參數 ,而 GetGammaRamp 接受一個參數。 針對 setGammaRamp ,第一個參數為 D3DSGR_CALIBRATE 或 D3DSGR_NO_CALIBRATION。 第二個參數 pRamp 是 D3DGAMMARAMP 結構的指標。 D3DGAMMARAMP 結構包含三個 256 個 WORD 元素陣列,每個數位各包含一個陣列,以包含紅色、綠色和藍色伽瑪坡形。 GetGammaRamp 有一個參數,其會採用將填入目前伽瑪坡道之 D3DGAMMARAMP 類型的指標。
您可以包含 setGammaRampSetGammaRamp 的第一個參數D3DSGR_CALIBRATE值,以在設定新的伽瑪層級時叫用校正器。 校正伽瑪坡道會產生一些處理額外負荷,而且不應該經常使用。 不論顯示器適配卡和監視器為何,設定校正的伽瑪坡道,都會為使用者提供一致且絕對的伽瑪值。
並非所有系統都支援伽瑪校正。 若要判斷是否支援伽瑪校正,請在方法傳回之後呼叫 GetDeviceCaps,並檢查相關聯 D3DCAPS9 結構的 Caps2 成員。 如果D3DCAPS2_CANCALIBRATEGAMMA功能旗標存在,則支援伽瑪校正。
設定新的坡形層級時,請記住,只有在應用程式處於全螢幕、獨佔模式時,才會使用您在陣列中設定的層級。 每當您的應用程式變更為一般模式時,坡道層級會保留一邊,當應用程式恢復全螢幕模式時,再次生效。
如果裝置不支援交換鏈結目前簡報模式中的伽瑪坡形(全螢幕或視窗化),則不會傳回任何錯誤值。 應用程式可以檢查D3DCAPS9類型 Caps2 成員中的D3DCAPS2_FULLSCREENGAMMA和D3DCAPS2_CANCALIBRATEGAMMA功能位,以判斷裝置的功能,以及是否已安裝校正器。
相關主題