DXUT框架剖析(14) 摘要:
控件是用戶接口的重要組成部分,為了便于用戶操作,為程序界面添加各種控件是非常好的方法。DXUT框架為在Direct3D程序中添加各種控件提供了支持。為了便于加載控件和處理各控件的消息,通常先在窗口中加載對話框,然后在對話框中添加響應的控件,由對話框來管理控件。為了統(tǒng)一管理各個對話框,還需要定義對話框資源管理器類CDXUTDialogResourceManager的一個對象,在程序開始時,調(diào)用各個對話框的Init函數(shù)和對話框資源管理對象進行初始化
DXUT框架剖析(13) 摘要:
DXUT框架對文本繪制進行了封裝,提供了類CDXUTHelper來簡化文本顯示,使用該接口大體分為3個步驟:初始化ID3DXSprite和ID3DXFont對象,顯示文本,釋放ID3DXSprite和ID3DXFont對象。
DXUT框架剖析(12) 摘要: DXUT暫停函數(shù):
DXUTPause:將框架的內(nèi)部計數(shù)器和(或)渲染過程設(shè)為暫停狀態(tài)。
DXUTRenderingPaused:檢查當前設(shè)備的渲染狀態(tài)是否處在暫停狀態(tài)。
DXUTIsTimePaused:檢查當前設(shè)備的計時器是否處在暫停狀態(tài)。
DXUT框架剖析(11) 摘要: DXUT統(tǒng)計函數(shù):
DXUTGetFPS: 獲取當前每秒提交的幀數(shù)。
DXUTGetFrameStats:獲取一個指向字符串的指針,該字符串包括每秒幀數(shù)、分辨率、后臺緩沖區(qū)格式、深度緩沖區(qū)格式。
DXUTGetDeviceStats:獲取一個指向字符串的指針,該字符串包括當前設(shè)備類型、頂點運算行為和設(shè)備名。
DXUT框架剖析(10) 摘要: 管理DXUT框架的函數(shù):
DXUTResetFrameworkState: 將框架狀態(tài)重置為初始默認狀態(tài),之前設(shè)置的框架狀態(tài)改變將失效。
DXUTShutdown: 觸發(fā)程序終止和清空框架。
DXUTGetExitCode: 獲取框架的退出代碼。
DXUT框架剖析(9) 摘要:
下面列出允許改變DXUT行為和獲取內(nèi)部變量的函數(shù),這些函數(shù)在使用DXUT框架的Direct3D程序中是非常實用的。
DXUT框架剖析(8) 摘要: Direct3D API的設(shè)計使程序能比較容易地處理各種錯誤,盡管大多數(shù)Direct3D
API函數(shù)返回HTRSULT值,但只有一部分函數(shù)返回設(shè)備錯誤,如D3DERR_DEVICELOST或
D3DERR_DRIVERINTERNALERROR。但是通常的Direct3D應用程序使用多種API函數(shù),當傳遞的參數(shù)不合要求時,將返回
D3DERR_INVALIDCALL。
當開發(fā)Direct3D應用程序時,應該檢查所有的API調(diào)用是否成功,如果出現(xiàn)一個沒有預測到的失敗調(diào)用,應用程序應立即給出通知或記錄該錯誤。使用這種方法,開發(fā)人員能很快發(fā)現(xiàn)哪些API函數(shù)的調(diào)用是不正確的。一個正確調(diào)用Direct3D
API函數(shù)的應用程序應能安全地忽略大多數(shù)Direct3D
API函數(shù)的失敗調(diào)用,除了一些關(guān)鍵性的API函數(shù),如Present()或TestCooperativeLevel(),這些函數(shù)返回的錯誤應用程序不能忽略。
DXUT框架剖析(7) 摘要: 框架也提供了幀事件,它在渲染過程中的每一幀被調(diào)用,應用程序應該注冊并實現(xiàn)這些回調(diào)函數(shù)。
DXUT框架剖析(6) 摘要:
在窗口和設(shè)備創(chuàng)建好之后,應用程序需要使用消息循環(huán)處理窗口消息、更新和渲染場景、處理設(shè)備事件。應用程序可以實現(xiàn)自己的消息循環(huán),也可以使用DXUT消息循環(huán),注冊相應的回調(diào)函數(shù),可以讓DXUT處理設(shè)備、幀消息事件。
為使用DXUT框架的消息循環(huán),可以調(diào)用DXUTMainLoop()函數(shù).
DXUT框架剖析(5) 摘要:
應用程序可以通過DXUTSetCallbackDeviceChanging()設(shè)置回調(diào)函數(shù)來修改Direct3D設(shè)備的創(chuàng)建設(shè)置。
回調(diào)函數(shù)ModifyDeviceSettings()返回一個布爾值,如果應用程序返回
TRUE,DXUT框架繼續(xù)像在正常情況下那樣進行設(shè)備創(chuàng)建。如果返回FALSE,框架不能改變設(shè)備,如果已有一個設(shè)備,則繼續(xù)使用當前設(shè)備。如果框架提出的請求是改變到一個應用程序不能使用的設(shè)備,應用程序可以拒絕該請求。例如,在一個多顯示器配置中,默認情況下在顯示器之間拖動窗口將使框架改變設(shè)備。但如果應用程序不能使用其他設(shè)備,它就必須拒絕這種改變并繼續(xù)使用當前設(shè)備。
DXUT框架剖析(4) 摘要:
通??梢杂脴藴实腄irect3D方法CreateDevice()創(chuàng)建一個Direct3D設(shè)備,這個方法需要一個有效的顯示適配器、設(shè)備類型(硬件抽象層設(shè)備或參考設(shè)備)、窗口句柄、運行標志(軟件/硬件頂點運算模式和其他驅(qū)動標志)和提交參數(shù)。更重要的是,結(jié)構(gòu)體
D3DPRESENT_PARAMETERS有許多成員指定了后臺緩沖區(qū)的設(shè)置、多重采樣設(shè)置、交換效果、窗口模式、深度緩沖區(qū)設(shè)置、刷新頻率、提交間隔和提交標志等。
為所有的參數(shù)選擇合適的設(shè)置是比較繁瑣的,DXUT框架使用函數(shù)DXUTCreateDevice()簡化了Direct3D設(shè)備的創(chuàng)建。
DXUT框架剖析(3) 摘要: 使用DXUT框架之前,首先需要初始化DXUT,初始化DXUT可以通過函數(shù)DXUTInit()完成。
通常在WinMain()函數(shù)中調(diào)用DXUTInit()函數(shù)進行DXUT初始化工作,如果程序員沒有調(diào)用DXUTInit()函數(shù),則DXUT框架會自動使用默認參數(shù)調(diào)用該函數(shù)。
DXUT框架剖析(2) 摘要: DXUT框架提供了下列服務,幫助程序員創(chuàng)建一個應用程序:
(1)簡化窗口和設(shè)備的創(chuàng)建。
(2)聲明設(shè)備事件(創(chuàng)建、重置、丟失、銷毀)和窗口事件(消息、鍵盤、鼠標)。
(3)在窗口模式和全屏模式間切換,在硬件抽象層設(shè)備和參考設(shè)備間切換。
(4)高分辨率計時器。
(5)為自動測試提供命令行支持。
(6)通過對話框或API選擇設(shè)備。
(7)紋理GUI控件組,包括IME-enable文本框。
(8)附加雜類,例如簡單的攝像機類。
DXUT框架剖析(1) 摘要: DXUT(也稱sample framework)是建立在Direct3D
API之上的Direct3D應用程序框架,有了DXUT這樣一個Direct3D程序框架,只需在這個框架的基礎(chǔ)上編寫相應的代碼,從而簡化了
windows和Direct3D API的使用,可以高效地進行Direct3D程序設(shè)計。