訓練
學習路徑
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
本節提供從舊版 Direct3D 移轉至 Direct3D 11 的資訊。
Direct3D 11 API 是以 Direct3D 10 和 10.1 中所做的基礎結構改進為基礎。 從 Direct3D 9 移植到 Direct3D 11 類似於從 Direct3D 9 移轉至 Direct3D 10。 以下是這項工作的主要挑戰。
如需從 Direct3D 9 移至 Direct3D 10 的詳細資訊,請參閱 Direct3D 9 至 Direct3D 10 考慮。
轉換使用 Direct3D 10 或 10.1 API 撰寫的程式是一個簡單的過程,因為 Direct3D 11 是現有 API 的擴展。 只有一個次要例外狀況(如下所述 - 單色文字篩選),Direct3D 10/10.1 中的所有方法和功能都可在 Direct3D 11 中使用。 下列概述說明兩個 API 之間的差異,以協助更新現有的程式代碼。 此處的主要差異包括:
Direct3D 10 | Direct3D 11 |
---|---|
DXGI_FORMAT |
DXGI_FORMAT已定義數個新的 DXGI 格式。 |
D3D10_CREATE_DEVICE_SWITCH_TO_REF |
D3D11_CREATE_DEVICE_SWITCH_TO_REFDirect3D 11 不支援切換至 ref 功能。 |
D3D10_DRIVER_TYPE |
D3D_DRIVER_TYPE請注意,D3D_DRIVER_TYPE 中的列舉標識碼已從 D3D10_DRIVER_TYPE中的標識元重新定義。 因此,您應該務必使用列舉標識符,而不是具體數字。 D3D_DRIVER_TYPE 定義於 D3Dcommon.h 中。 |
D3D10_RESOURCE_MISC_FLAG |
D3D11_RESOURCE_MISC_FLAG請注意,已重新定義其中許多旗標,因此請務必使用列舉標識符,而不是常值數位。 |
D3D10_FILTER |
D3D11_FILTER請注意,文字篩選D3D10_FILTER_TEXT_1BIT已從 Direct3D 11 中移除。 請參閱 DirectWrite。 |
D3D10_COUNTER |
D3D11_COUNTER請注意,Direct3D 11 已移除廠商中性計數器,因為它們很少受到支援。 |
D3D10_x | D3D11_x許多列舉和定義都相同、具有較大的限制或具有其他值。 |
Direct3D 10 | Direct3D 11 |
---|---|
D3D10_SO_DECLARATION_ENTRY |
D3D11_SO_DECLARATION_ENTRY新增數據流。 |
D3D10_BLEND_DESC |
D3D11_BLEND_DESC請注意,此結構從 10 到 10.1 發生了重大變更,以提供每個渲染目標的混合狀態 |
D3D10_BUFFER_DESC |
D3D11_BUFFER_DESC新增 StructureByteStride 以搭配計算著色器資源使用 |
D3D10_SHADER_RESOURCE_VIEW_DESC |
D3D11_SHADER_RESOURCE_VIEW_DESC請注意,這個結構在10.1版中新增了更多的聯合成員。 |
D3D10_DEPTH_STENCIL_VIEW_DESC |
D3D11_DEPTH_STENCIL_VIEW_DESC具有新的 Flags 成員。 |
D3D10_QUERY_DATA_PIPELINE_STATISTICS |
D3D11_QUERY_DATA_PIPELINE_STATISTICS新增數個著色器階段計數器。 |
D3D10_x | D3D11_x許多結構在兩個 API 之間完全相同。 |
Direct3D 10 | Direct3D 11 |
---|---|
ID3D10Device |
ID3D11Device 和 ID3D11DeviceContext 裝置介面已分成這兩個部分。 若要快速移植,您可以使用 ID3D11Device::GetImmediateContext。 “ID3D10Device::GetTextFilterSize” 和 “SetTextFilerSize” 方法已不存在。 請參閱 DirectWrite。 Create*Shader 會針對 ID3D11ClassLinkage採取額外的選擇性參數。 *SetShader 和 *GetShader 會針對 ID3D11ClassInstance(s) 採取其他選擇性參數。 CreateGeometryShaderWithStreamOutput 接受一個陣列和計數來處理多個輸出數據流步幅。 在 Direct3D 11 中,CreateGeometryShaderWithStreamOutput 的 NumEntries 參數限制已增加到 D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT。 |
ID3D10Buffer | ID3D11Buffer |
ID3D10SwitchToRef | Direct3D 11 不支援 ID3D11SwitchToRefSwitch-to-ref 功能。 |
ID3D10Texture1D | ID3D11Texture1D |
ID3D10Texture2D | ID3D11Texture2D |
ID3D10Texture3D |
ID3D11Texture3DMap 和 Unmap 方法已移至 ID3D11DeviceContext,而所有 Map 方法都會使用 D3D11_MAPPED_SUBRESOURCE 而不是 void**。 |
ID3D10Asynchronous |
ID3D11Asynchronous的 Begin、End 和 GetData 已移至 ID3D11DeviceContext。 |
ID3D10x | ID3D11x 兩個 API 之間的許多介面都相同。 |
10/10.1 解決方案 | 11 解決方案 |
---|---|
HLSL 編譯器(D3D10Compile*,D3DX10Compile*)和著色器反射 API | D3DCompiler (請參閱 D3DCompiler.h) 注意: 針對 Windows 市集應用程式,D3DCompiler API 僅支持開發,而不是部署。 |
效果 10 |
效果 11 以線上共享資源的形式提供。
注意: 此解決方案不適用於 Windows 市集應用程式,因為它需要在運行時間(部署) D3DCompiler API。 |
D3DX9/D3DX10 數學 | DirectXMath |
D3DX10 | 舊版 DirectX SDK 中的 D3DX11 DirectXTex、DirectXTK,以及 DirectXMesh 提供舊版 D3DX10 和 D3DX11 連結庫中許多技術的替代方案。 Direct2D 和 DirectWrite 提供呈現樣式線條和字型的高品質的支援。 |
如需舊版 DirectX SDK 的相關信息,請參閱 DirectX SDK 在哪裡?。
Direct3D 10.1 是 Direct3D 10 介面的延伸模組,Direct3D 10.1 的所有功能都可在 Direct3D 11 中使用。 大部分從 10.1 到 11 的移植工作已經在之前從 10 到 11 的過程中解決。
Direct3D 10.1 | Direct3D 11 |
---|---|
D3D10_FEATURE_LEVEL1 |
D3D_FEATURE_LEVEL相同,但定義於 D3DCommon.h,並且增加了用於 11 類別硬體的 D3D_FEATURE_LEVEL_11_0,以及用於 10level9 的 D3D_FEATURE_LEVEL_9_1、D3D_FEATURE_LEVEL_9_2 和 D3D_FEATURE_LEVEL_9_3。 (D3D10_FEATURE_LEVEL_9_1、D3D10_FEATURE_LEVEL_9_2和D3D10_FEATURE_LEVEL_9_3也將10.1增加至d3d10_1.h) |
Direct3D 10.1 | Direct3D 11 |
---|---|
D3D10_BLEND_DESC1 |
D3D11_BLEND_DESC11 版本與 10.1 相同。 |
D3D10_SHADER_RESOURCE_VIEW_DESC1 |
D3D11_SHADER_RESOURCE_VIEW_DESC11 版本與 10.1 相同。 |
Direct3D 10.1 | Direct3D 11 |
---|---|
ID3D10Device1 |
ID3D11Device 和 ID3D11DeviceContext 裝置介面已分成這兩個部分。 若要快速移植,您可以使用 ID3D11Device::GetImmediateContext。 “ID3D10Device::GetTextFilterSize” 和 “SetTextFilerSize” 方法已不存在。 請參閱 DirectWrite。 Create*Shader 會針對 ID3D11ClassLinkage採取額外的選擇性參數。 *SetShader 和 *GetShader 會針對 ID3D11ClassInstance(s) 採取其他選擇性參數。 CreateGeometryShaderWithStreamOutput 接受一個數組和一個計數來設定多個輸出流的步幅。 在 Direct3D 11 中,CreateGeometryShaderWithStreamOutput 的 NumEntries 參數上限已增加至 D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT。 |
ID3D10BlendState1 | ID3D11BlendState |
ID3D10ShaderResourceView1 | ID3D11ShaderResourceView |
一旦程式代碼更新為使用 Direct3D 11 API,有許多 新功能 考慮。
Windows 8 包含當您實作 DirectX 圖形程式代碼時要考慮的進一步 DirectX 圖形增強功能,其中包括 Direct3D 11.1、DXGI 1.2、Windows Display Driver Model (WDDM) 1.2、功能層級 11.1 硬件、Direct2D 裝置內容和其他改善。
Windows 7 上提供 Direct3D 11.1 的部分支援,以及透過適用於 Windows 7 的 Platform Update取得,可透過適用於 Windows 7 的平臺更新取得。
Windows 8.1 包含 Direct3D 11.2、DXGI 1.3及其他改善。
Direct3D 11 程式設計手冊
訓練
學習路徑
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
文件
瞭解 Direct3D 11 效果。 效果是管線狀態,由以 HLSL 撰寫的表達式和效果架構特有的某些語法所設定。
本主題說明如何初始化裝置。
Direct3D 11 圖形