国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Vista開(kāi)發(fā)人員的故事:DirectX

2019-11-17 04:52:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
引言

  Direct3D 始終為在 Windows 平臺(tái)上渲染圖形提供最佳性能的 API。Windows Vista 的發(fā)布又使這些技術(shù)上升到了一個(gè)新的臺(tái)階。Direct3D 現(xiàn)在直接集成在 Vista 中,它將 Direct3D 圖形管道用于桌面組合、Picture Viewer 和 Windows PResentation Foundation。

  本文概述了 Direct3D Vista 的一些新功能,主要說(shuō)明它們?nèi)绾尾拍転?DirectX 開(kāi)發(fā)人員帶來(lái)好處。另外,在各節(jié)中還分別指出了相應(yīng)功能的相關(guān)附加信息的位置。

  在 Windows 幫助文件中可以找到更多的 Direct3D 文章,該文件可以從 Windows Vista Developer Story(英文)頁(yè)面下載。

  體系結(jié)構(gòu)

  Windows Vista 引入了 DirectX 的兩種新類(lèi)型:Direct3D 9Ex 和 Direct3D 10。

  ?Direct3D 9Ex 是 DirectX 的擴(kuò)展版本,它針對(duì)除了使用 Direct3D 9 外,還希望使用 Windows Vista 驅(qū)動(dòng)程序部分新功能的應(yīng)用程序而設(shè)計(jì)。

  ?Direct3D 10 是一項(xiàng)新增的 DirectX 技術(shù),已針對(duì) Windows Vista 進(jìn)行了全新構(gòu)建。它提供了最先進(jìn)的圖形渲染功能。

  此外,Direct3D 9 和舊版 DirectX API 仍可在 Windows Vista 上運(yùn)行,從而答應(yīng)舊代碼向后兼容。

  Windows Vista 顯示器驅(qū)動(dòng)程序模型 (WDDM)

  Direct3D 9Ex 和 Direct3D 10 均構(gòu)建于新款 Windows 顯示器驅(qū)動(dòng)程序模型 (WDDM) 之上。圖形硬件只有實(shí)施 WDDM 才能在 Vista 上利用 Direct3D。

  WDDM 提供了增強(qiáng)的穩(wěn)定性、虛擬內(nèi)存分配、安全性以及利用圖形處理器 (GPU) 進(jìn)行多任務(wù)操作的能力。

  增強(qiáng)的穩(wěn)定性是通過(guò)在 WDDM 中將驅(qū)動(dòng)程序分割成兩個(gè)組成部分(即精簡(jiǎn)的內(nèi)核模式驅(qū)動(dòng)程序和用戶(hù)模式驅(qū)動(dòng)程序)來(lái)實(shí)現(xiàn)的。由于將大部分驅(qū)動(dòng)程序代碼移出了內(nèi)核,因此,WDDM 答應(yīng)系統(tǒng)在不關(guān)閉整個(gè)操作系統(tǒng)的情況下從致命的崩潰和掛起中恢復(fù)。

  WDDM 現(xiàn)在答應(yīng)“虛擬”的視頻內(nèi)存。虛擬化將視頻內(nèi)存抽象化,因此沒(méi)必要考慮在視頻或系統(tǒng)內(nèi)存中創(chuàng)建資源。只要指定即將使用哪個(gè)資源,系統(tǒng)就會(huì)將內(nèi)存放在盡可能最合適的地方。此外,虛擬化所答應(yīng)分配的內(nèi)存比硬件上實(shí)際已存在的內(nèi)存要大。隨后,內(nèi)存即根據(jù)需要調(diào)入到正確的硬件之中。

  將內(nèi)存分配限定于應(yīng)用程序地址空間主要是為了確保安全。通過(guò)將應(yīng)用程序與各自的資源相互隔離開(kāi)來(lái),WDDM 提供了增強(qiáng)的安全性能。

  先前的驅(qū)動(dòng)程序模型 (XPDM) 專(zhuān)為單個(gè)應(yīng)用程序而設(shè)計(jì),這樣就使圖形硬件的使用負(fù)擔(dān)大大加重。這樣做是出于性能的原因,卻為共享 GPU 帶來(lái)了困難。大多數(shù)用戶(hù)都經(jīng)歷過(guò)這樣的事情,即從游戲中切換出來(lái)后會(huì)造成應(yīng)用程序中的設(shè)備狀態(tài)丟失。再次回到游戲畫(huà)面時(shí),必須重建所有資源并重置設(shè)備,最好的情形下只是需要多花費(fèi)一些時(shí)間,而最糟的情形下則會(huì)引發(fā)崩潰。

  WDDM 現(xiàn)在提供了一個(gè) GPU 內(nèi)存治理器和調(diào)度器,它答應(yīng)多個(gè)應(yīng)用程序同時(shí)訪(fǎng)問(wèn) GPU。因?yàn)?Direct3D 應(yīng)用程序不再需要獨(dú)占訪(fǎng)問(wèn) GPU,因此在各應(yīng)用程序間切換時(shí)幾乎沒(méi)有障礙。在使用 WDDM 的情況下,僅當(dāng)驅(qū)動(dòng)程序升級(jí)、物理移除設(shè)備、GPU 重置及發(fā)生意外錯(cuò)誤時(shí),Direct3D 設(shè)備才會(huì)丟失。

  在運(yùn)行舊版 DirectX 時(shí),WDDM 會(huì)模擬早期驅(qū)動(dòng)程序模型的行為。

  Direct3D 10

  Direct3D 10 分層運(yùn)行系統(tǒng)

  Direct3D 10 共分 4 層構(gòu)建;一個(gè)瘦的核心層和三個(gè)用于添加功能的可選層。

層名說(shuō)明核心提供全部基本功能,是訪(fǎng)問(wèn) Direct3D 10 時(shí)唯一需要的層。調(diào)試添加參數(shù)并進(jìn)行一致性驗(yàn)證和大量調(diào)試輸出。著色反射提供答應(yīng)應(yīng)用程序從設(shè)備中檢索著色或效果信息的方法。線(xiàn)程安全答應(yīng)多線(xiàn)程應(yīng)用程序訪(fǎng)問(wèn)設(shè)備。默認(rèn)情況下啟用此層,但不會(huì)對(duì)單線(xiàn)程應(yīng)用程序的性能造成影響。  
  在創(chuàng)建設(shè)備時(shí)可以指定不同的層組合。

  有關(guān)具體信息,請(qǐng)參見(jiàn) Direct3D 10 文檔中的“API 層”。

  注重:要獲得 DirectX SDK,請(qǐng)參見(jiàn) Microsoft DirectX Downloads(英文)。

  Direct3D 10 圖形管道

  Direct3D 的先前版本提供了少量預(yù)定義的算法,稱(chēng)作固定功能圖形管道。內(nèi)存資源(如幾何模型和紋理)通過(guò)這些算法運(yùn)行以生成最終的顯示圖像。可有多種不同的方法來(lái)配置這些算法以生成不同的效果,但開(kāi)發(fā)人員不能制作用于生成新的圖形效果的管道。

  Direct3D 8 引入了采用圖形編程的可編程管道模型,它將管道分為許多階段,每個(gè)階段只負(fù)責(zé)一種特定類(lèi)型的資源處理過(guò)程。Direct3D 10 進(jìn)一步推廣并增加了可編程管道的功能。Direct3D 10 有七個(gè)階段,其中三個(gè)階段是可編程的。通過(guò)編寫(xiě)著色,可編程管道階段答應(yīng)開(kāi)發(fā)人員創(chuàng)建階段所使用的算法。

  下表列出了這些管道階段:


階段名說(shuō)明輸入裝配器階段新增:為管道提供幾何數(shù)據(jù)(三角形、線(xiàn)、點(diǎn))。頂點(diǎn)著色階段用于處理各個(gè)頂點(diǎn)幾何數(shù)據(jù)的可編程階段。常見(jiàn)操作是移動(dòng)和亮起頂點(diǎn)。幾何著色階段新增:用于處理圖元幾何(全部的三角形線(xiàn)條或點(diǎn))的可編程階段。此階段可根據(jù)輸入圖元?jiǎng)?chuàng)建和輸出新的幾何。可以使用這一階段中的著色以編程的方式創(chuàng)建整個(gè)外形。流輸出階段新增:編寫(xiě)進(jìn)入內(nèi)存之前的階段中所生成的頂點(diǎn)數(shù)據(jù)。這可用于將頂點(diǎn)反饋回管道之中以供另一通道使用,或者答應(yīng)復(fù)制它們以交由 CPU 處理。光柵化階段設(shè)置幾何以將其映射至最終顯示的二維視圖。像素著色階段用于計(jì)算每個(gè)已渲染圖元的像素值的可編程階段。可以使用這一階段中的著色來(lái)生成高級(jí)的每像素光照或反射效果。輸出混合階段利用深度/模板緩沖區(qū)合并不同類(lèi)型的輸出數(shù)據(jù),并將結(jié)果寫(xiě)入渲染目標(biāo)。  
  有關(guān)具體信息,請(qǐng)參見(jiàn) Direct3D 10 文檔中的“管道階段”部分。

  Direct3D 10 著色

  “著色”是一組命令,它們接受圖形資源作為輸入,運(yùn)行一系列關(guān)于資源的指令并輸出結(jié)果。Direct3D 10 提供三種不同的“著色”,它們分別與三種可編程管道階段相對(duì)應(yīng):頂點(diǎn)著色、幾何著色和像素著色。所有著色均基于一個(gè)公用著色核心,并提供相同的基本功能。除基本功能之外,每種類(lèi)型的著色均提供特定于其特定階段的獨(dú)有功能。著色是使用高級(jí)著色語(yǔ)言 (HLSL) 編寫(xiě)的,該語(yǔ)言答應(yīng)在算法級(jí)別進(jìn)行著色編程。對(duì)著色中指令的數(shù)目沒(méi)有限制。

  假如在設(shè)備創(chuàng)建中包括著色反射層,則現(xiàn)在可使用 ID3D10ShaderReflection 接口通過(guò)反射來(lái)檢索著色信息。

  有關(guān)具體信息,請(qǐng)參見(jiàn) Direct3D 10 文檔中的“著色功能”部分。

  幾何著色

  幾何著色是 DirectX 的新增階段,它可以為 3D 場(chǎng)景創(chuàng)建幾何對(duì)象。可利用它來(lái)生成多種效果。使用這一功能強(qiáng)大的新增著色類(lèi)型,可完成陰影錐、毛皮、魚(yú)鰭、程序幾何、細(xì)節(jié)、GPU 粒子系統(tǒng)、位移效果和計(jì)劃植被(請(qǐng)參見(jiàn) Direct3D 10 文檔中的“管道 GS 示例”),這只是其中的幾個(gè)示例。由于著色在 GPU 上運(yùn)行,因此沒(méi)有占用 CPU 資源,從而將 CPU 資源釋放出來(lái)以供其他任務(wù)使用。

  有關(guān)運(yùn)行中幾何著色的示例,請(qǐng)參見(jiàn) Direct3D 10 文檔中的“教程 13:幾何著色”部分。

  流輸出階段

  流輸出階段是 DirectX 的新增階段,用于將圖形管道外部的頂點(diǎn)數(shù)據(jù)寫(xiě)入緩沖區(qū)。通過(guò)此階段,可將“頂點(diǎn)著色”階段或“幾何著色”階段(根據(jù)管道配置而定)生成的頂點(diǎn)數(shù)據(jù)讀回到管道中,以供另一通道使用。這可通過(guò) DrawAuto 命令完成,不必占用 CPU。或者,將數(shù)據(jù)復(fù)制到資源中,由 CPU 進(jìn)一步處理。

  有關(guān)具體信息,請(qǐng)參見(jiàn) Direct3D 10 文檔中的“流輸出階段”部分。

  cbuffer 和 tbuffer

  HLSL 提供以下兩種類(lèi)型緩沖區(qū)來(lái)存儲(chǔ)恒變量:cbuffer 和 tbuffer。Cbuffer 類(lèi)似于效果文件中的 C 結(jié)構(gòu)。

  下面是“常量緩沖區(qū)”的示例,它聲明了一個(gè) world 矩陣、一個(gè)對(duì)象位置和一個(gè)數(shù)組索引:

  cbuffer MyObject

  {

  float4x4 matWorld;

  float3 vObjectPosition;

  int arrayIndex;

  }

  在 Direct3D 10 中,所有著色常量必須放在“常量緩沖區(qū)”中。可將所有常量放在一個(gè)緩沖區(qū)中,也可以放在多個(gè)緩沖區(qū)中,并可以通過(guò)任意方式來(lái)治理它們。通常,根據(jù)常量的更新和使用頻率來(lái)將常量放入不同的緩沖區(qū)中。通過(guò)根據(jù)更新頻率來(lái)治理常量,可減少必要的調(diào)用和更新次數(shù),從而使 CPU 到 GPU 之間的帶寬效率達(dá)到最大。從著色訪(fǎng)問(wèn)這些緩沖區(qū)時(shí)的延遲時(shí)間會(huì)減少。

  Direct3D 10 中的 tbuffer 是從紋理負(fù)載中讀取的著色常量的緩沖區(qū)。這為隨意制定索引的數(shù)據(jù)提供了更好的性能。

  有關(guān)具體信息,請(qǐng)參見(jiàn) Direct3D 10 文檔中的“著色恒變量”部分。

  設(shè)備狀態(tài)

  Direct3D 10 將設(shè)備狀態(tài)分為五種狀態(tài)對(duì)象。

狀態(tài)對(duì)象說(shuō)明輸入布局在輸入緩沖區(qū)中設(shè)置幾何數(shù)據(jù)的格式和大小,該緩沖區(qū)會(huì)將圖元從內(nèi)存注入到管道中。光柵化設(shè)置“光柵化階段”的狀態(tài),包括填充或剔除模式,啟用剪式矩形將三維空間中的幾何圖元剪切并映射到二維視口中。深度模板配置深度緩沖區(qū)并設(shè)置模板測(cè)試。混合設(shè)置“輸出混合”階段將“像素著色”輸出與當(dāng)前渲染目標(biāo)相混合的方式。取樣器設(shè)置著色所使用的紋理取樣器,以篩選內(nèi)存中的紋理。  
  有關(guān)具體信息,請(qǐng)參見(jiàn) Direct3D 10 文檔中的“狀態(tài)對(duì)象”部分。

  組合在一起:效果

  Direct3D 10 的效果系統(tǒng)已完全重寫(xiě)。FX10 系統(tǒng)比 FX9 更快,內(nèi)存使用也更低,F(xiàn)X10 專(zhuān)門(mén)針對(duì) Direct3D 10 硬件而設(shè)計(jì)。

  效果答應(yīng)開(kāi)發(fā)人員創(chuàng)建這樣一個(gè)文件,其中包含特定圖形方法所需的所有著色和設(shè)備狀態(tài)。其中可能包含位移映射、反射渲染、幾何創(chuàng)建,或者著色和設(shè)備狀態(tài)的任意組合結(jié)果。效果非常有用,因?yàn)樗鼈兎庋b了非凡的圖形技巧,該技巧答應(yīng)開(kāi)發(fā)人員在內(nèi)容創(chuàng)建應(yīng)用程序、不同的游戲以及其他應(yīng)用程序中使用同一效果文件,從而獲得相同的結(jié)果。

  可將效果編譯成字節(jié)代碼,以改進(jìn)運(yùn)行系統(tǒng)性能。否則它們將在載入內(nèi)存時(shí)進(jìn)行編譯。

  Direct3D 10 文檔中的許多示例都使用 FX 文件。有關(guān)如何使用效果文件的完整論述,請(qǐng)參見(jiàn)“教程 3:著色和效果系統(tǒng)”。

  資源

  Direct3D 10 已重新設(shè)計(jì)了資源體系結(jié)構(gòu)。
資源是內(nèi)存中的一個(gè)區(qū)域,可以由圖形管道訪(fǎng)問(wèn)。資源通常包含紋理、輸入幾何、著色資源、頂點(diǎn)緩沖區(qū)、索引緩沖區(qū)和常量緩沖區(qū)等內(nèi)容。

  對(duì)于創(chuàng)建的每種資源,開(kāi)發(fā)人員可以平衡該資源所需的功能與該資源性能之間的關(guān)系。通常,訪(fǎng)問(wèn) Direct3D 10 資源所需的開(kāi)銷(xiāo)比訪(fǎng)問(wèn) DirectX 先前版本中的資源要低得多。

  Direct3D 10 引入了紋理數(shù)組以簡(jiǎn)化紋理治理。紋理數(shù)組包含一個(gè)或多個(gè)紋理,可以在應(yīng)用程序內(nèi)部或通過(guò)著色制定索引。也可以將整個(gè)數(shù)組設(shè)置為渲染目標(biāo)。

  目前,可將資源存儲(chǔ)為無(wú)類(lèi)型資源。使用無(wú)類(lèi)型資源時(shí),必須通過(guò)獲取視圖將其解釋為某一具體的類(lèi)型。視圖答應(yīng)資源中的數(shù)據(jù)以不同的格式重新解釋。這會(huì)更改其表示方式,但不會(huì)更改實(shí)際的基礎(chǔ)數(shù)據(jù)。這種方法提高了性能,因?yàn)橘Y源不必在每次繪圖調(diào)用時(shí)均進(jìn)行類(lèi)型驗(yàn)證。

  在不同的綁定位置(在圖形管道中),視圖可以啟用不同的資源解釋。例如,著色資源視圖可以將具有六個(gè)紋理的 Texture2DArray 解釋為立方圖。

  有關(guān)資源的完整論述,請(qǐng)參見(jiàn) Direct3D 10 文檔中的“資源”部分。

  Direct3D 10 和 CAPS

  先前各版本的 DirectX 使用功能標(biāo)志或 CAPS 來(lái)決定硬件支持哪些功能。對(duì)于 Direct3D 10,確保所有功能均可在與視頻硬件兼容的 Direct3D 10 上執(zhí)行,因此消除了查詢(xún)?cè)O(shè)備上是否存在 CAPS 的必要。

  先前那些依靠于設(shè)備 caps 的應(yīng)用程序可以通過(guò)改寫(xiě)設(shè)備枚舉和強(qiáng)行將設(shè)備 CAPS 設(shè)為敏感值來(lái)判定它們不再存在的事實(shí)。

  Direct3D 9Ex

  Direct3D 9Ex 做了大量改進(jìn),答應(yīng)利用某些 WDDM 功能。

  Direct3D 9Ex 中新增的其中一個(gè)最大優(yōu)點(diǎn)是其可以利用 WDDM 的 GPU 內(nèi)存治理器和調(diào)度器,以減少設(shè)備丟失的次數(shù)。因?yàn)樵S多應(yīng)用程序可以在 WDDM 下共享 GPU,因此在 Direct3D 9Ex 中設(shè)備丟失狀態(tài)的情形幾乎不會(huì)發(fā)生。只有在由于掛起而引起硬件重置或設(shè)備驅(qū)動(dòng)程序停止時(shí),設(shè)備才會(huì)丟失。模式更改不再導(dǎo)致所有視頻內(nèi)存資源和交換鏈被丟棄。

  現(xiàn)在,通過(guò) Direct3D 9Ex 也可以在設(shè)備或進(jìn)程之間共享 Direct3D 資源。

  有關(guān) Direct3D 9Ex 的具體信息,請(qǐng)參見(jiàn) Microsoft Windows SDK 文檔的 DirectX for Windows Vista(英文)部分。

  示例

  通過(guò)下面的路徑,您可以在 Windows Platform SDK 中找到演示 Direct3D 9Ex 新功能的示例:

  ../Microsoft SDKs/Windows/v6.0/Samples/multimedia/Direct3d/Direct3D9Ex

  此示例創(chuàng)建了兩臺(tái) DirectX 設(shè)備:一臺(tái)在低優(yōu)先級(jí)后臺(tái)線(xiàn)程中運(yùn)行,負(fù)責(zé)渲染大量的立方體;另一臺(tái)在較高優(yōu)先級(jí)線(xiàn)程中運(yùn)行,并利用前臺(tái)光標(biāo)合成后臺(tái)渲染。后臺(tái)渲染被復(fù)制到共享表面,以答應(yīng)前臺(tái)設(shè)備對(duì)其進(jìn)行訪(fǎng)問(wèn)。這樣,在后臺(tái)進(jìn)行全面渲染時(shí)光標(biāo)仍可流暢地運(yùn)行。

  更多資源

  要查看更多的本系列文章,請(qǐng)?jiān)L問(wèn) MSDN 上的 Windows Developer Story(英文)并下載 Windows 幫助文件。請(qǐng)查看有關(guān) DirectX 編程和 Vista 兼容性問(wèn)題、內(nèi)存治理、IO 等信息的新增內(nèi)容。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 民乐县| 苏尼特右旗| 谷城县| 榆树市| 东至县| 河间市| 延吉市| 黎川县| 泰来县| 南投县| 抚顺市| 昌乐县| 溧水县| 晋中市| 庆安县| 深水埗区| 汉沽区| 措美县| 团风县| 太原市| 红安县| 陆良县| 新余市| 深泽县| 兴安盟| 双桥区| 牟定县| 榆社县| 藁城市| 温宿县| 疏勒县| 钟祥市| 庆云县| 中牟县| 古浪县| 搜索| 佛坪县| 宜昌市| 宜昌市| 婺源县| 虎林市|