DXUT11框架浅析(1)--错误处理




DXUT11框架浅析(1)--错误处理



         DXUT11定义了一系列错误代码(error codes),定义了各种出错的返回标识。此外对dxerr.h中的DXTrace函数进行了封装。

 

 

1. 错误代码

 

错误代码是在DXUT.h中定义。当D3D程序出错时,可以返回响应的错误信息,以便快速定位问题。

 

DXUTERR_NODIRECT3D

没有D3D9设备

 

DXUTERR_NOCOMPATIBLEDEVICES

无法找到兼容的设备

 

DXUTERR_MEDIANOTFOUND

找不到资源文件

 

DXUTERR_NONZEROREFCOUNT

有对象没有被释放

 

DXUTERR_CREATINGDEVICE

Create device时发生错误

 

DXUTERR_RESETTINGDEVICE

Reset device时发生错误

 

DXUTERR_CREATINGDEVICEOBJECTS

在device create callback函数中出错

 

DXUTERR_RESETTINGDEVICEOBJECTS

在device reset callback函数中出错

 

DXUTERR_DEVICEREMOVED

设备被移除

 

DXUTERR_NODIRECT3D11

没有D3D11设备

 

DXUTDisplayErrorMessage()

显示错误信息。DXUTInit的形参bShowMsgBoxOnError就是控制是否显示错误对话框

 

 

2. 错误信息提示

 

在DXUTmisc.h中定义。用于打印各种信息已经弹出错误信息框。

 

HRESULTWINAPIDXUTTrace(constCHAR*strFile,DWORDdwLine,HRESULThr,constWCHAR*strMsg,boolbPopMsgBox );

用以显示错误信息框以帮助我们调试。内部调用API函数DXTrace实现。

 

 

3. 宏

 

为了简化函数的使用,定义了多个宏。

 

3.1 输出错误信息

#if defined(DEBUG)|| defined(_DEBUG)
#defineDXUT_ERR(str,hr)          DXUTTrace(__FILE__, (DWORD)__LINE__,hr,str, false )
#defineDXUT_ERR_MSGBOX(str,hr)    DXUTTrace(__FILE__,(DWORD)__LINE__,hr,str,true )
#defineDXUTTRACE                 DXUTOutputDebugString
#else
#defineDXUT_ERR(str,hr)           (hr)
#defineDXUT_ERR_MSGBOX(str,hr)    (hr)
#defineDXUTTRACE                  (__noop)
#endif

只有在调试状态时(DEBUG),这几个宏才起效。这几个宏在DXUT11的Sample也不直接使用,而是给下面的断言使用。

 

 

3.2 出错断言

#if defined(DEBUG)|| defined(_DEBUG)
#ifndefV
#defineV(x)           {hr = (x);if( FAILED(hr) ) {DXUTTrace(__FILE__, (DWORD)__LINE__,hr,L#x,true ); } }
#endif
#ifndefV_RETURN
#defineV_RETURN(x)    {hr = (x);if( FAILED(hr) ) {returnDXUTTrace(__FILE__,(DWORD)__LINE__,hr,L#x,true ); } }
#endif
#else
#ifndefV
#defineV(x)           {hr = (x); }
#endif
#ifndefV_RETURN
#defineV_RETURN(x)    {hr = (x);if( FAILED(hr) ) {returnhr; } }
#endif
#endif

用V或V_RETURN判断这句是否成功,若不成功,在DEBUG状态下会弹出错误信息框。

 




 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值