共用方式為


Windows 中的圖形 API

Windows Vista 包含全新的顯示驅動程式模型支援,此模型代表視訊驅動程序設計的重大修訂,因為 Windows 98 引進 Windows 驅動程式模型 (WDM)。 這個重新設計的模型反映了影片硬體從 2D 點陣作業和 GDI 應用程式的世界發展到具有固定功能圖形硬體的 3D 遊戲,最後是支援各種高效能圖形應用程式的現代可程式化圖形處理單元 (GPU)。 Windows 7 和 Windows 8 建置在 Windows Vista 圖形基礎結構上,方法是提供額外的圖形功能和 API。 本文討論 Windows 圖形功能和 API。

背景

自 Windows 早期以來程式設計圖形的主要 API 是圖形化裝置介面 (GDI)。 此 API 的設計目的是要處理許多 2D 輸出裝置,並形成 Windows 使用者介面體驗的基礎。 DirectDraw 和 Direct3D 已引進為替代 API,以支援全螢幕遊戲和 3D 轉譯作為時間現有硬體的延伸模組。 與 GDI 的互動很複雜。 傳統 GDI 元素與 Direct3D 元素的有效混音受到此設計的限制。 稱為 XPDM 的 Windows XP 版本反映了 GDI 和 Direct3D 的並存本質(請參閱圖 1)。

圖 1. Windows XP 中的圖形 API

xpdm

多年來,3D 視頻卡的威力已大幅提升到絕大多數硬體都致力於此功能的地步。 新的驅動程式模型 Windows Display Driver Model (WDDM),將 GPU 和 Direct3D 帶到最前沿,讓您能夠建立全新的體驗 3D 桌面,順暢地將 GDI 的 2D 世界與現代可程式化 GPU 的強大功能融合在一起。 使用 WDDM 時,視訊硬體完全由 Direct3D 驅動,而所有其他圖形介面會透過新的 Direct3D 中心驅動程式模型與視訊硬體通訊(請參閱圖 2)。

圖 2. Windows Vista 中的圖形 API

wddm

如需 WDDM 的詳細資訊,請參閱 Windows Vista 顯示驅動程式模型 (WDDM) 設計指南

Direct3D 9

DirectX 第 9 版於 2002 年首次發行,並在 2003 年和 2004 年推出後續更新。 此 API 代表 DirectX 技術的十年演進、引進更強大的 Direct3D 著色器程序設計模型,以及數千個出貨標題所支援的成熟度。 Direct3D 9 是 Windows Vista 上的主要圖形介面。 它仍然是用來撰寫需要在各種現有硬體和 Windows 版本上執行之 3D 遊戲和應用程式的理想 API。 使用 Direct3D 9 介面的應用程式會隱藏新驅動程式模型的詳細數據,但在幕後,操作系統會充分利用新功能,以提供真正的 GPU 多任務、更有效率的資源管理和強固的效能。

為了確保與舊版 Windows 完全相容,即使是新的 Windows Vista 顯示驅動程式模型,也必須模擬舊驅動程式模型的一些古怪。 例如,當全螢幕應用程式失去焦點時,它必須假設它已遺失視訊記憶體 (VRAM) 中的所有資源,並重載它建立為非受控資源的資源,即使新的驅動程式模型以透明方式處理資源,而不會從裝置內容收回資源。 即使是 Managed 與預設資源類型的概念,也是舊驅動程式模型特有的。 另一個範例是配置非受控(預設集區)資源超過可用 VRAM 數量的失敗預期,即使新的驅動程式模型可以提供幾乎無限量的虛擬視訊記憶體。 由於這些需求,在 Windows Vista 上執行的 Direct3D 應用程式仍會收到這些錯誤狀況。 因此,它們受限於使用基本 Direct3D 9 介面的能力,以充分利用新驅動程式模型的一些功能。

雖然隨附於 Windows Vista 的新系統將會包含具有 WDDM 驅動程式的視訊卡,以及一些熱門視頻卡的新驅動程式包含在方塊中,但 Windows Vista 會繼續支援使用較舊的 XPDM 驅動程式進行升級和公司版本的能力。 在使用舊驅動程式模型的系統上,必須使用 Direct3D 9 和舊版介面,而且圖形系統的作業與 Windows XP 的作業非常類似(圖 1)。 應用程式需要 WDDM 才能使用 Direct3D 9Ex、Direct3D 10 和更新版本。

Direct3D 9Ex

Direct3D 9Ex 介面可讓您存取標準 Direct3D 9 API 的輕微延伸,此 API 會公開虛擬化資源配置、新的遺失裝置語意,以及 Windows Vista 上執行時可用的一些其他新功能。 藉由建立此擴充物件,Direct3D 9 API 會使用新的語意,因此需要應用程式使用不同的邏輯(因此,不同的程式代碼路徑)來建立、管理和錯誤處理新種類的條件。 此 API 僅適用於 Windows Vista,而且需要 WDDM 驅動程式。 由於 Direct3D 9Ex 使用與 Direct3D 9 不同的 API 和驅動程式程式代碼路徑,因此支援此 API 需要您的應用程式額外的測試案例。

建立新的 Direct3D 9Ex API 的主要原因,是允許完整存取 WDDM 的新功能,同時維持現有 Direct3D 應用程式的相容性。 新的 3D 桌面和許多 Windows Vista 特定應用程式會使用此版本的 Direct3D 9,但在舊版 XPDM 驅動程式上執行時,它們無法運作。 由於沒有 WDDM 的支援,Direct3D 9Ex API 永遠不會出現在舊版 Windows 上,因此標準 Direct3D 9 介面涵蓋更廣泛的系統集合。 對於可以利用新一代視訊硬體的高效能應用程式,Direct3D 的全新 10 版提供許多未由 Direct3D 9Ex 公開的新功能。 因此,針對遊戲和其他大部分應用程式,Direct3D 9 或 Direct3D 10 是建議的 API。

注意

DirectX SDK 不提供 Direct3D 9Ex 介面的範例、標頭或連結庫。 如需 Direct3D 9Ex 的詳細資訊,請參閱 適用於 Windows Vista 的 DirectX。

Direct3D 10

為了充分瞭解新的 Windows Vista 驅動程式模型和新一代硬體的潛力,已建立全新的 Direct3D API 版本。 雖然 WDDM 可消除現有圖形系統中效能的一些限制,但 Direct3D 10 會進一步移除現有 Direct3D API 中的設計瓶頸,並大幅簡化 GPU 程式設計工作。

新的 API 完全排除了一些固定函式層面,並以可程式化的建構取代它們,並大幅簡化內部實作。 舊版 Direct3D 中的數百個功能位已完全消除,並以定義完善的內含功能集取代,只有一些特定資源格式的選擇性使用案例。 CPU 密集的資源建立和驗證現在在新 API 中具有明確的語意。 這可讓您更可預測的效能行為,並大幅降低每個繪製的額外負荷。 您可以將資源重新設定為多個窗體,以允許在各種階段有效率地使用,而功能集會限制格式的使用案例要少得多。 另外還有新的區塊壓縮標準地圖紋理格式。

在新 API 中,著色器常數和裝置狀態是明確的資源,可讓您在硬體上進行更有效率的快取,並大幅簡化驅動程序驗證。 可程式化著色器模型已跨頂點和像素著色器統一,並透過定義完善的計算模型和運算符集來更具表現力。 此外,在頂點著色器階段之後,已新增新的幾何著色器階段,以在基本類型上操作。 GPU 在管線頂點和幾何著色器階段中的工作結果可以串流到視訊 RAM 以供重複使用,以允許使用最少 CPU 互動的極複雜多階段 GPU 作業。

所有這些增強功能都啟用新一代圖形技術,並擴充應用程式將工作卸除至 GPU 的能力。 卸除允許更複雜的 GPU 型字元外觀、加速變形技術、陰影量產生和立體化、完全以 GPU 為基礎的粒子和物理系統、更複雜的材質結合成有效率的大型繪製批次、程式細節、即時光線追蹤位移對應、單一傳遞立方體對應產生,以及更多技術,同時釋放 CPU 資源以用於更複雜的應用程式。

為了在 Direct3D 10 中提供這種創新層級,舊版硬體無法表示為新介面的部分實作。 視頻卡可以支援所有新功能,或不是 Direct3D 10 功能的卡片。 因此,雖然 Direct3D 9 可以驅動具有許多遺漏功能位和使用限制的 DirectX7 時代硬體,但 Direct3D 10 只能在新一代的視訊卡上運作。 若要讓應用程式支援較舊的視訊硬體,它也必須支援 Direct3D 9 介面。 未來的 Direct3D 版本會以 10 版為基礎,將其擴充至新版本的 API,同時確保 Direct3D 10 功能的嚴格超集。

如需 Direct3D 10 的詳細資訊,請參閱 Direct3D 10

Direct3D 10.1

Windows Vista Service Pack 1 使用 Direct3D 10.1 擴充 Direct3D 10 API,其會新增選擇性介面和其他著色器模型,以支持支援 Direct3D 10.1 之視訊卡的新硬體功能。 能夠支援 Direct3D 10.1 的所有硬體也完全支援 Direct3D 10 的所有功能,遊戲開發人員可以在可用時使用 Direct3D 10.1 的其他功能。

注意

Direct3D 10.1 是 Windows 7 桌面所使用的圖形 API。

 

注意

Windows 7 和 Windows Vista 更新會將 DXGI 1.1、10level9 功能層級的支援,以及 WARP10 裝置新增至現有的 Direct3D 10.1 API。

 

Direct3D 11

Windows 7 支援以 Direct3D 10.1 API 設計為基礎的 Direct3D Direct3D 11 新修訂。 API 的新功能包括多線程轉譯和資源建立、計算著色器、支援 10level9 功能層級和 WARP10 軟體轉譯裝置,以及新的 Direct3D 11 類別硬體功能,例如使用船體和網域著色器進行鑲嵌、BC6H 和 BC7 紋理壓縮格式、著色器模型 5.0 和動態著色器連結。 新的 API 可以使用現有的 Direct3D 10 和 10.1 類別視頻卡、部分 Direct3D 9 卡透過 10level9 功能層級,具有有限的功能支援,以及最新一代 Direct3D 11 類別的視訊卡。

除了 Direct3D 11 API 之外,Windows 7 還包含 DXGI 1.1、Direct2D、DirectWrite,以及 WDDM 1.1 驅動程序的支援。

注意

Direct3D 11 和相關 API 也可作為 Windows Vista 的更新提供(請參閱 如何安裝最新版本的 DirectX)。

 

Direct3D 11.1

Windows 8 使用 Direct3D 11.1 擴充 Direct3D 11 API 。 Direct3D 11.1 支援功能層級 11、10_x和9_x支援的所有現有硬體,以及新的 11_1 功能層級。

除了 Direct3D 11.1 API 之外,Windows 8 還包含 DXGI 1.2Direct2D 裝置內容,以及 WDDM 1.2 驅動程式的支援。

注意

如果您想要讓 Windows 市集應用程式使用 DirectX 來設計 3D 圖形,您可以使用 Direct3D 11.1 API。 如需使用 DirectX 進行 3D 圖形程式設計的詳細資訊,請參閱 DirectX 的 3D 圖形簡介。

 

適用於 Windows 7 的平臺更新:Windows 7 或已安裝 Windows 7 平臺更新的 Windows Server 2008 R2 上的 Direct3D 11.1 API 提供部分支援。 如需 Windows 7 平臺更新的詳細資訊,請參閱 適用於 Windows 7 的平臺更新。

OpenGL

Windows Vista、Windows 7 和 Windows 8 提供與 Windows XP for OpenGL 相同的支援,這可讓視頻卡製造商為 OpenGL 提供可安裝的用戶端驅動程式 (ICD),以提供硬體加速支援。 請注意,需要較新版本的這類 ICD 才能完全支援 Windows Vista 或 Windows 7 或 Windows 8。 如果未安裝 ICD,則大部分情況下,系統會回復為 OpenGL v1.1 軟體層。

應用程式相容性、GDI 和舊版 Direct3D

Windows Vista、Windows 7 和 Windows 8 圖形系統的設計目的是支援廣泛的硬體和使用案例,以啟用新技術,同時繼續支援現有的系統。 現有的圖形介面,例如 GDI、GDI+和舊版的 Direct3D,會繼續在 Windows Vista 和 Windows 7 上運作,但盡可能在內部重新對應。 這表示大部分現有的 Windows 應用程式會繼續運作。

Windows Vista、Windows 7 和 Windows 8 繼續支援與 Windows XP 相同的 Direct3D 和 DirectDraw 介面,回到 DirectX 第 3 版(但已移除 Direct3D 的保留模式除外)。 就像 Windows XP Professional x64 Edition 一樣,較新版本 Windows 上的 64 位原生應用程式僅限於 Direct3D9、DirectDraw7 或較新的介面。 高效能應用程式應該使用 Direct3D 9 或更新版本,以確保它們最符合硬體功能。

建議

為圖形化應用程式選取 API 時,請考慮下列建議:

  • 如果您的應用程式必須支援 Windows XP 或舊版 Windows,請使用 Direct3D 9。
  • 如果您想要支援使用 XPDM 驅動程式執行的 Windows Vista 或 Windows 7,請使用 Direct3D 9。 對於缺少 Direct3D 10 或更佳視訊硬體的 Windows Vista 或 Windows 7 系統,您可以選擇使用現有的 Windows XP Direct3D 9 程式代碼路徑,或透過 Direct3D 10.1 或 Direct3D 11 API 使用 10level9 功能層級。
  • 使用 Direct3D 11 利用 Windows Vista、Windows 7 和 Windows 8 上的新一代視訊硬體。 Windows 市集應用程式必須使用 Direct3D 11 或更新版本。