Direct3D9 建立裝置

2021-04-30 23:38:04 字數 1549 閱讀 3908

在d3d9中,建立裝置前要先呼叫direct3dcreate9建立d3d9物件, 再呼叫idirect3d9::createdevice建立裝置物件。

應用程式可以對硬體查詢來檢測硬體支援的d3d裝置型別。本節講述了列舉顯示介面卡和選擇direct3d裝置等內容。

應用程式必須執行一系列任務來選擇適當的d3d裝置。注意以下步驟是針對全屏應用程式的。大多數情況下,視窗應用程式可以跳過其中的多數步驟。

1. 首先,應用程式必須列舉系統中的顯示介面卡。乙個介面卡是一塊物理硬體,注意一塊顯示卡可能包含乙個以上介面卡,如雙頭顯示的情況。與多顯示器無關的應用程式可以忽略這一步,並在第2步時將d3dadapter_default引數傳給idirect3d9::enumadaptermodes方法。

2. 對每乙個介面卡,應用程式通過呼叫idirect3d9::enumadaptermodes列舉該介面卡支援的顯示模式。

3. 如果需要,應用程式可以通過呼叫idirect3d9::checkdevicetype檢查每乙個被列舉的顯示模式是否具備硬體加速。

4. 應用程式通過呼叫idirect3d9::getdevicecaps方法檢查此介面卡上的裝置對d3d功能特性的支援程度。對經由idirect3d9::checkdevicetype驗證過所有顯示模式的裝置,可以保證idirect3d9::getdevicecaps返回的裝置能力是不變的。

5. 如果某畫素格式(format)正是裝置支援的顯示模式的格式,那麼裝置總是可以渲染到這些格式的表面(su***ce)。若應用程式需要渲染到不同格式的表面,則可以呼叫idirect3d9::checkdeviceformat。若裝置可以渲染到這種格式的表面,則可以保證所有idirect3d9::getdevicecaps返回的能力都是可用的。

6. 最後,應用程式可以使用idirect3d9::checkdevicemultisampletype方法檢測裝置是否支援多重取樣技術,如全屏抗鋸齒。

完成以上步驟後,應用程式就可以得到乙個可用的顯示模式列表。最後一步是驗證有足夠的裝置可訪問的記憶體,以容納所需數量的快取和抗鋸齒所需的記憶體。這個測試是必需的,因為不同顯示模式和多重取樣的組合所消耗的記憶體不通過驗證是無法**的。此外,有些顯示介面卡的體系結構可能無法保證裝置可訪問記憶體的數量保持不變。這意味著當切換到全屏模式時,應用程式應該有能力報告視訊記憶體用盡的錯誤。一般來說,應用程式應該在提供給使用者的模式列表中移除全屏模式,或者應該通過減少後快取的數量或使用不太複雜的多重取樣技術以試圖消耗較少的記憶體。

視窗應用程式執行一系列類似的操作。

1. 檢測被視窗的客戶區覆蓋的桌面矩形。

2. 列舉介面卡,找到覆蓋該客戶區的相應介面卡。如果客戶區被乙個以上介面卡擁有,那麼應用程式可以選擇單獨處理每個介面卡,或僅處理單個介面卡,並由direct3d在presentation時把畫素從乙個裝置上傳送到另一裝置上。應用程式也可以忽略以上兩步並使用d3dadapter_default。注意當視窗被放置在第二個顯示器上時,執行速度可能會比較慢。

3. 應用程式應該呼叫idirect3d9::checkdevicetype檢測在桌面模式下裝置是否支援渲染到指定格式的後快取。idirect3d9::getadapterdisplaymode可用於檢測桌面顯示格式。

Direct3D9的擴充套件紋理格式

klayge遊戲引擎 在winxp下,即使gpu支援d3d10 也只能用d3d9的api。但實際上各個廠商都對d3d9做了一些擴充套件,把部分d3d10 的特性暴 露給了d3d9 api。以下是一些特殊的紋理格式,通過fourcc的方式來使用。通過checkdeviceformat可以檢測是否支援該...

Direct3D 9學習筆記 3 基本頂點繪製

如下頂點資料結構 struct vertex vertex float x,float y,float z float x,y,z static const dword fvf 然後建立乙個頂點快取 device createvertexbuffer 3 sizeof vertex size in ...

Direct3D 10教程9 DXUT中的網格

本教程介紹了匯入原始檔的網格的方法,使用的方式是dxut,但是,沒有dxut也可以使用網格。在本教程中,你通過匯入乙個檔案中的模型將它繪製在視窗中,這個模型已經包含了經過座標對映的紋理。sdk root samples c direct3d10 tutorials tutorial09。在源 中設定...