青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

DXUT框架剖析(8)

DXUT框架與錯誤處理

Direct3D API的設計使程序能比較容易地處理各種錯誤,盡管大多數Direct3D API函數返回HTRSULT值,但只有一部分函數返回設備錯誤,如D3DERR_DEVICELOST或D3DERR_DRIVERINTERNALERROR。但是通常的Direct3D應用程序使用多種API函數,當傳遞的參數不合要求時,將返回D3DERR_INVALIDCALL。

當開發Direct3D應用程序時,應該檢查所有的API調用是否成功,如果出現一個沒有預測到的失敗調用,應用程序應立即給出通知或記錄該錯誤。使用這種方法,開發人員能很快發現哪些API函數的調用是不正確的。一個正確調用Direct3D API函數的應用程序應能安全地忽略大多數Direct3D API函數的失敗調用,除了一些關鍵性的API函數,如Present()或TestCooperativeLevel(),這些函數返回的錯誤應用程序不能忽略。

通過僅處理最重要的Direct3D錯誤,可以提高運行速度并使應用程序代碼更健壯,因為代碼中需要處理錯誤的地方并不多。對于為數不多的幾個API函數的失敗調用,必須予以適當處理。

框架中錯誤的處理對應Direct3D API中如何設計錯誤的處理,對于各種各樣的錯誤,如丟失媒體(missing media),應用程序能通知用戶并終止。對于每一幀都將調用的大多數API函數,錯誤僅在調試時向開發人員顯示一個錯誤消息框來處理,而在發布時這些錯誤都被忽略了。框架用在DXUT.h中定義的幾個宏來完成這一操作:

#if defined(DEBUG) || defined(_DEBUG)
#ifndef V
#define V(x) { hr = (x); if( FAILED(hr) ) { DXUTTrace( __FILE__, (DWORD)__LINE__, hr, L#x, true ); } }
#endif
#ifndef V_RETURN
#define V_RETURN(x) { hr = (x); if( FAILED(hr) ) { return DXUTTrace( __FILE__, (DWORD)__LINE__, hr, L#x, true ); } }
#endif
#else
#ifndef V
#define V(x) { hr = (x); }
#endif
#ifndef V_RETURN
#define V_RETURN(x) { hr = (x); if( FAILED(hr) ) { return hr; } }
#endif
#endif

當使用vs.net時,如果想跳到出錯代碼所在的行,只需簡單地雙擊調試輸出窗口中輸出的錯誤信息行即可。

 

選擇最可行的設備

DXUT使用高度靈活的方法從枚舉集合中選擇最好的設備,這個設備枚舉和分級系統可以通過調用函數DXUTFindValidDeviceSettings()獨立于框架使用,該函數的聲明如下:

Finds valid device settings to be used to create a new device.

HRESULT DXUTFindValidDeviceSettings(
DXUTDeviceSettings * pOut,
DXUTDeviceSettings * pIn,
DXUTMatchOptions * pMatchOptions
);

Parameters

pOut
[out] Pointer to a DXUTDeviceSettings structure that contains valid settings for the new device.
pIn
[in] Pointer to a DXUTDeviceSettings structure that contains desired settings for the new device. The default value is NULL.
pMatchOptions
[in] Pointer to a DXUTMatchOptions structure that contains flags describing how to use the device settings when choosing valid output device settings. Optimal device settings will be created based upon the match values in DXUTMatchOptions. If NULL, the function acts as if all members of this structure were DXUTMT_IGNORE_INPUT, meaning that the function will return valid device settings as close as possible to default device settings. See Remarks. The default value is NULL.

Return Values

If the function succeeds, the return value is S_OK. If the function fails, the return value can be one of the error codes in DXUTERR.

Remarks

This function attempts to find valid device settings based upon the input device settings, given by pIn. For each device setting, a match option in the DXUTDeviceSettings structure specifies how the function makes decisions. The function works for both Direct3D 9 and Direct3D 10 device settings.

This function is internally by DXUT used when toggling between full screen and windowed modes, when selecting between HAL and REF device types, and inside DXUTCreateDevice.


DXUTMatchOptions

Describes match options for finding valid device settings using the DXUTFindValidDeviceSettings function. Each member of this structure corresponds to a setting described by the DXUTDeviceSettings structure.

Default values are used when a member is set to DXUTMT_IGNORE_INPUT. See Remarks.

typedef struct DXUTMatchOptions {
DXUT_MATCH_TYPE eAPIVersion;
DXUT_MATCH_TYPE eAdapterOrdinal;
DXUT_MATCH_TYPE eOutput;
DXUT_MATCH_TYPE eDeviceType;
DXUT_MATCH_TYPE eWindowed;
DXUT_MATCH_TYPE eAdapterFormat;
DXUT_MATCH_TYPE eVertexProcessing;
DXUT_MATCH_TYPE eResolution;
DXUT_MATCH_TYPE eBackBufferFormat;
DXUT_MATCH_TYPE eBackBufferCount;
DXUT_MATCH_TYPE eMultiSample;
DXUT_MATCH_TYPE eSwapEffect;
DXUT_MATCH_TYPE eDepthFormat;
DXUT_MATCH_TYPE eStencilFormat;
DXUT_MATCH_TYPE ePresentFlags;
DXUT_MATCH_TYPE eRefreshRate;
DXUT_MATCH_TYPE ePresentInterval;
} DXUTMatchOptions, *LPDXUTMatchOptions;

Members

eAPIVersion
Match type for the API version.
eAdapterOrdinal
Match type for the display adapter ordinal.
eOutput
Match type for the adapter output ordinal.
eDeviceType
Match type for the enumerated type of the device. If set to DXUTMT_IGNORE_INPUT, then the default value is D3DDEVTYPE_HAL.
eWindowed
Match type for the windowed or full-screen mode. if set to DXUTMT_IGNORE_INPUT, then the default value is windowed mode (TRUE).
eAdapterFormat
Match type for the adapter surface format. If set to DXUTMT_IGNORE_INPUT, then the default value is the desktop display mode, or D3DFMT_X8R8G8B8 if the desktop display mode is less than 32 bits.
eVertexProcessing
Match type for the vertex processing flags D3DCREATE_HARDWARE_VERTEXPROCESSING, D3DCREATE_MIXED_VERTEXPROCESSING, or D3DCREATE_SOFTWARE_VERTEXPROCESSING. if set to DXUTMT_IGNORE_INPUT, then the default value is D3DCREATE_HARDWARE_VERTEXPROCESSING.
eResolution
Match type for the display mode resolution. if set to DXUTMT_IGNORE_INPUT, then the default value is 640 x 480 pixels for windowed mode, or the desktop resolution for full-screen mode.
eBackBufferFormat
Match type for the back buffer format. if BackBufferFormat is set to DXUTMT_IGNORE_INPUT, then the default value is to match the adapter format.
eBackBufferCount
Match type for the number of back buffers. if BackBufferCount is set to DXUTMT_IGNORE_INPUT, then the default value is 2 for triple buffering.
eMultiSample
Match type for the quality level. if set to DXUTMT_IGNORE_INPUT, then the default value is to disable multisampling (MultiSampleQuality = 0).
eSwapEffect
Match type for the swap effect. if set to DXUTMT_IGNORE_INPUT, then the default value is D3DSWAPEFFECT_DISCARD.
eDepthFormat
Match type for the depth format of the automatic depth-stencil surface that the device will create. If both eDepthFormat and eStencilFormat are set to DXUTMT_IGNORE_INPUT, then the default value is D3DFMT_D16 if the backbuffer format is 16 bits or less, or D3DFMT_D32 otherwise.
eStencilFormat
Match type for the stencil format of the automatic depth-stencil surface that the device will create. if both eDepthFormat and eStencilFormat are set to DXUTMT_IGNORE_INPUT, then the default value is D3DFMT_D16 if the backbuffer format is 16 bits or less, or D3DFMT_D32 otherwise.
ePresentFlags
Match type for the presentation parameters flags. if set to DXUTMT_IGNORE_INPUT, then the default value is D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL.
eRefreshRate
Match type for the rate at which the display adapter refreshes the screen. If set to DXUTMT_IGNORE_INPUT, then the default value is 0, indicating windowed mode.
ePresentInterval
Match type for the presentation interval. if set to DXUTMT_IGNORE_INPUT, then the default value is D3DPRESENT_INTERVAL_IMMEDIATE for windowed mode, or D3DPRESENT_INTERVAL_DEFAULT for full-screen mode.

Remarks

For each member of this structure, match options are specified using the constant values of the DXUT_MATCH_TYPE enumeration, as in the following code example.

matchOptions.eResolution = DXUTMT_CLOSEST_TO_INPUT;

To use default device settings instead, use the DXUTMT_IGNORE_INPUT flag as follows:

matchOptions.eResolution = DXUTMT_IGNORE_INPUT;

DXUT_MATCH_TYPE

Describes how to match input device settings when creating a new device with a function.

typedef enum DXUT_MATCH_TYPE
{
DXUTMT_IGNORE_INPUT = 0,
DXUTMT_PRESERVE_INPUT,
DXUTMT_CLOSEST_TO_INPUT,
} DXUT_MATCH_TYPE, *LPDXUT_MATCH_TYPE;

Constants

DXUTMT_IGNORE_INPUT
Ignore the device setting input, and return a device setting as close as possible to a default device setting.
DXUTMT_PRESERVE_INPUT
Return without changing the device setting that was given as input to the function.
DXUTMT_CLOSEST_TO_INPUT
Return a device setting as close as possible to the device setting that was given as input to the function.

假設想要獲取一個硬件抽象層設備,其后臺緩沖區格式是D3DFMT_A2B10G10R10,如果系統中的硬件抽象層設備不支持這種后臺緩沖區格式,但有一個安裝好的參考設備支持,那么該函數可以使用該參考設備或根據硬件抽象層設備改變后臺緩沖區格式,這都將通過枚舉類型DXUT_MATCH_TYPE來控制如何采用設備格式。


posted on 2008-05-16 18:43 lovedday 閱讀(1093) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美精品一区二区三区在线播放| 一区二区在线视频播放| 黄色影院成人| 国产精品九九| 国产精品一二三四区| 国产精品日韩精品欧美精品| 国产老女人精品毛片久久| 国产精品一区二区在线| 国产深夜精品| 亚洲福利视频网站| 亚洲精品视频中文字幕| 一本久道久久综合中文字幕| 欧美亚洲一区| 欧美成年人视频| 亚洲精品久久久蜜桃| 亚洲最新视频在线播放| 午夜在线视频一区二区区别| 久久久久久网址| 欧美日韩一区二区在线观看视频| 国产精品爽黄69| 亚洲黄色影片| 午夜精品一区二区三区在线视| 免费久久99精品国产自在现线| 亚洲激情一区| 久久综合999| 亚洲精品网站在线播放gif| 亚洲网站在线播放| 蜜臀av一级做a爰片久久| 国产精品美女午夜av| 在线观看欧美亚洲| 午夜综合激情| 91久久精品美女高潮| 欧美在线视频二区| 欧美精品免费在线| 欲色影视综合吧| 欧美亚洲日本国产| 亚洲毛片一区| 欧美激情亚洲视频| 亚洲国产精品尤物yw在线观看| 亚洲欧美卡通另类91av| 亚洲黄色精品| 欧美不卡在线视频| 狠狠久久婷婷| 久久久国产成人精品| 亚洲午夜av在线| 欧美日韩一区二区三区在线观看免| 亚洲激情av| 免费在线成人| 久久精品99国产精品| 国产无遮挡一区二区三区毛片日本| 亚洲影院免费观看| 一区二区三区视频免费在线观看| 欧美 日韩 国产在线| 在线日本欧美| 欧美电影在线播放| 免费中文字幕日韩欧美| 91久久综合| 91久久嫩草影院一区二区| 欧美mv日韩mv国产网站app| 亚洲第一精品福利| 麻豆精品精华液| 久久综合久久综合久久| 亚洲电影免费观看高清完整版在线观看| 久久九九久精品国产免费直播| 午夜欧美大片免费观看| 国产丝袜美腿一区二区三区| 久久精品一区二区三区四区| 久久不射电影网| 在线电影欧美日韩一区二区私密| 美腿丝袜亚洲色图| 蜜桃av噜噜一区| 99国产精品国产精品久久| 亚洲美洲欧洲综合国产一区| 欧美午夜视频在线观看| 小黄鸭精品aⅴ导航网站入口| 亚洲欧美精品中文字幕在线| 国产视频在线观看一区二区| 麻豆freexxxx性91精品| 欧美成年网站| 亚洲一区二区三区在线视频| 午夜精品一区二区三区四区| 激情综合久久| 欧美激情按摩| 国产精品扒开腿做爽爽爽软件| 亚洲欧美制服中文字幕| 亚洲激情电影在线| 亚洲国产日韩在线| 亚洲成色精品| 亚洲成人在线网| 欧美深夜影院| 日韩视频久久| 亚洲精品乱码久久久久久黑人| 一区二区三区国产精品| 亚洲精品一区二区三区不| 欧美在线高清| 国产精品99久久久久久白浆小说| 老巨人导航500精品| 麻豆国产精品va在线观看不卡| 国产精品视频yy9299一区| 91久久久久久久久| 亚洲自拍偷拍福利| 国产精品久久久久影院亚瑟| 欧美高清在线播放| 亚洲国产婷婷综合在线精品 | 91久久精品日日躁夜夜躁欧美| 欧美自拍偷拍午夜视频| 久久久久久久欧美精品| 久久精品三级| 午夜久久久久久| 午夜精品久久久| 先锋影音久久久| 国产午夜精品一区二区三区欧美| 欧美freesex交免费视频| 欧美午夜精品久久久久免费视| 国产在线一区二区三区四区| 亚洲精品日韩在线| 欧美一区二区三区精品| 99亚洲伊人久久精品影院红桃| 欧美自拍偷拍| 免费观看国产成人| 中国成人黄色视屏| 欧美成人免费全部观看天天性色| 久久精品免费观看| 国产精品区免费视频| 亚洲精品色图| 日韩午夜在线电影| 欧美成人精品三级在线观看| 老司机67194精品线观看| 国产精品亚发布| 亚洲天堂视频在线观看| 亚洲午夜影视影院在线观看| 欧美精品观看| 91久久久亚洲精品| 91久久国产综合久久| 久久成人精品视频| 久久国产精品免费一区| 国产精品视频你懂的| 亚洲欧美国产精品专区久久| 午夜在线观看欧美| 国产精品系列在线播放| 亚洲一区二区三区视频播放| 欧美一区二区三区婷婷月色| 国产日韩欧美一区二区| 久久国产日韩欧美| 欧美高清视频一区二区三区在线观看| 影音先锋日韩资源| 免费国产一区二区| 日韩天堂在线视频| 羞羞色国产精品| 伊人成人开心激情综合网| 男女av一区三区二区色多| 亚洲精品久久久久| 午夜激情一区| 伊人激情综合| 欧美喷潮久久久xxxxx| 一区二区三区精品视频| 久久精品夜色噜噜亚洲a∨| 在线精品一区二区| 欧美日韩一区二区三区在线观看免| 正在播放日韩| 免费看精品久久片| 夜色激情一区二区| 国产小视频国产精品| 欧美大成色www永久网站婷| 夜夜嗨av一区二区三区网站四季av| 欧美亚洲日本网站| 亚洲欧洲一区二区天堂久久| 国产精品久久久久久久久婷婷| 久久九九免费视频| 亚洲美女电影在线| 久热国产精品视频| 制服诱惑一区二区| 尤妮丝一区二区裸体视频| 欧美日韩免费看| 久久精品30| 99精品欧美一区二区三区综合在线| 久久成人综合视频| 99综合视频| 国内精品亚洲| 国产精品成人在线观看| 久久综合九色综合欧美狠狠| 亚洲欧美另类久久久精品2019| 亚洲承认在线| 久久久蜜桃一区二区人| 亚洲私人影吧| 亚洲精品国产精品国产自| 国内精品美女av在线播放| 欧美性猛交xxxx免费看久久久| 开心色5月久久精品| 欧美呦呦网站| 亚洲一区二区在线| 99视频一区二区| 91久久国产综合久久| 狠狠色丁香婷婷综合久久片| 国产精品久久久久9999吃药| 欧美日韩视频在线一区二区观看视频| 久久国产精品99久久久久久老狼| 中日韩美女免费视频网站在线观看| 亚洲国产另类久久久精品极度 | 亚洲愉拍自拍另类高清精品|