點陣圖物件
注意
針對Windows 10上的應用程式,我們建議使用 Windows.UI.Composition API,而不是 DirectComposition。 如需詳細資訊,請參閱 使用視覺層將傳統型應用程式現代化。
Microsoft DirectComposition 是點陣圖撰寫引擎。 它可讓應用程式開發人員結合多個點陣圖,並以各種方式操作它們,以在應用程式 UI 中達成有趣的視覺效果和動畫。 本主題描述 DirectComposition 支援的點陣圖內容類型。
點陣圖內容
應用程式藉由建立視覺物件,然後設定這些物件的 Content 屬性 ,提供 DirectComposition 與點陣圖內容來撰寫和產生動畫效果。 DirectComposition 不提供任何點陣化服務。 應用程式必須使用一些其他軟體型或硬體加速點陣化程式庫,例如 Direct2D 或 Direct3D 來填入要撰寫的點陣圖。 撰寫之後,DirectComposition 會將撰寫的點陣圖內容傳遞至 桌面視窗管理員, (DWM) 轉譯至畫面。
支援的點陣圖內容類型 Microsoft DirectComposition 支援下列類型的點陣圖:
視訊記憶體點陣圖
視訊記憶體點陣圖會使用 Microsoft DirectX 方法來點陣化硬體, (包括 DX 到 GDI Interop 模型) 。 它是由呼叫端應用程式和 DirectComposition 可見的跨進程共用介面所支援。 視訊記憶體點陣圖不受分割限制,因為應用程式只能從 DirectComposition 紋理的來源表面讀取。
影片內容
應用程式可以使用 DirectComposition 來撰寫使用系結至 DirectComposition 介面之 DirectX 無視窗交換鏈結的視訊畫面。 就概念上,DirectComposition 會將視訊內容視為一連串的點陣圖。 DirectComposition 不提供呈現視訊畫面的方法。
DirectComposition 支援 DirectX 無視窗交換鏈結,也就是未系結至特定視窗的交換鏈結,並可讓兩個不同的應用程式跨進程界限共用無視窗交換鏈結。 共用無視窗交換鏈結可讓影片案例在一個進程中建立交換鏈結,並在第二個進程中與 DirectComposition 搭配使用。 無視窗交換鏈結是使用 IDXGIFactory2::CreateSwapChainForCompositionSurface 方法來建立。
如需 DirectX 交換鏈結的詳細資訊,請參閱 DXGI 概觀。
身歷聲內容
就概念而言,立體交換鏈結是由 Microsoft DirectX Graphics Infrastructure (DXGI) 表面所組成,代表立體 3D 內容的左右通道。 當立體交換鏈結當做視覺效果的點陣圖資源使用時,DirectComposition 會以身歷聲撰寫。 所有非身歷聲內容 (單聲道內容) 視為具有相同的左右通道內容;也就是說,這兩個通道都會使用相同的點陣圖內容。 DirectComposition 會分別撰寫所有左側內容和所有右側內容。 如果顯示裝置無法進行立體化,DirectComposition 會根據應用程式 () 視為單聲道內容,並只針對點陣圖資源使用該資料撰寫,將左右身歷聲通道視為單聲道內容。
DirectComposition 不支援建立或操作身歷聲內容,也無法將單聲道交換鏈結升階為身歷聲配對。 應用程式必須先執行這些工作,才能將 DirectX 身歷聲內容呈現至 DirectComposition。 此外,應用程式必須針對深度感知提供左右通道位移;DirectComposition 無法調整左右通道位移,以修改 DirectX 身歷聲內容的感知深度。
當具備身歷聲功能的硬體可用時,DirectX 身歷聲內容會組成並保存到 DWM。
視窗點陣圖
「視窗點陣圖」不是真正的點陣圖,而是 DirectComposition 以分層最上層或子視窗點陣化即時取代的預留位置。 視窗點陣圖類似于 DWM 縮圖,不同之處在于縮圖可以包含來自許多視窗的貢獻,例如擁有的非子視窗,而 DirectComposition 視窗點陣圖一律只是一個視窗及其子系的標記法。
由於 DirectComposition 可以存取所有視窗和所有視覺化樹狀結構的重新導向表面,因此它可以重複使用多個視覺化樹狀結構中一個視窗的內容。 視窗必須分層,因為非分層視窗沒有專用的重新導向表面,因此,其點陣化不一定可供 DirectComposition 使用。
若要使用視窗點陣圖,應用程式會將視覺效果與視窗控制碼建立關聯, (HWND) 。 之後,每當視窗的內容變更時,DirectComposition 就會重新撰寫視覺效果,包括當內容因為與視窗相關聯的視覺化樹狀結構變更而變更時。 換句話說,例如 DWM 縮圖,DirectComposition 視窗點陣圖是「即時」。
將點陣圖內容與視覺效果產生關聯
針對這三種點陣圖,應用程式可以將相同的點陣圖與多個視覺效果產生關聯,這表示單一記憶體配置可以用來顯示相同的內容數次。
Alpha 色板
所有點陣圖的每個圖元都有 32 位 (BPP) 格式,其中包含每個圖元透明度的 8 位。 不過,應用程式可以指定 DirectComposition 應該如何使用 Alpha 色板。 特別是,DirectComposition 可以遵守 Alpha 色板,也可以完全忽略 Alpha,在此情況下,點陣圖會被視為完全不透明。
額外的 Alpha 模式會忽略 Alpha 色板,但會將紅色、綠色和藍色值視為個別色板 Alpha 值,而不是將這些通道的一般解譯視為色彩強度。 此模式適用于 ClearType 轉譯,這需要子圖元涵蓋範圍資訊。 若要使用每一通道 Alpha 模式,應用程式必須先使用Direct2D和DirectWrite將子圖元涵蓋範圍資料寫入點陣圖。 接下來,應用程式必須設定正確的 Alpha 模式,並在將點陣圖與視覺效果產生關聯時指定文字色彩。 DirectComposition 會將文字色彩與涵蓋範圍資料混合,以針對背景產生 ClearType 混合。
在 ClearType 演算法不適用的情況下,例如,如果點陣圖不是圖元對齊和軸對齊,或是需要繪製到中繼表面,DirectComposition 就可以使用點陣圖中的子圖元涵蓋範圍資料來改為產生灰階點陣化,且不需額外費用。
如需詳細資訊,請參閱IDCompositionDevice::CreateSurface或IDCompositionDevice::CreateVirtualSurface函式的AlphaMode參數描述。
相關主題