4.5 调试Direct3D应用程序
来源:互联网 发布:淘宝三国杀ol卡是什么 编辑:程序博客网 时间:2024/05/16 08:32
4.5 调试Direct3D应用程序
为了简化代码并突出重点,我们在本书的示例中省略了很多错误处理语句。不过,我们实现了一个宏,用它来检查许多Direct3D函数返回的HRESULT值。这个宏定义在d3dUtil.h文件中:
#if defined(DEBUG) | defined(_DEBUG) #ifndef HR #define HR(x) \ { \ HRESULT hr = (x); \ if(FAILED(hr)) \ { \ DXTrace(__FILE__, (DWORD)__LINE__, hr, L#x, true); \ } \ } #endif #else #ifndef HR #define HR(x) (x) #endif#endif
当函数的返回值表明调用失败时,我们把返回值传递给DXTrace函数。请注意,当使用该函数时,我们必须在代码中添加包含语句“#include<dxerr.h>”,并链接dxerr.lib库文件,只有这样程序才能通过编译。
HRESULT WINAPI DXTraceW(const char* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, BOOL bPopMsgBox);
该函数可以弹出一个消息框,显示出现错误的文件、行号、有关错误的描述信息以及导致错误的函数名。图4.11是它的一个例子。注意,当DXTrace函数的最后一个参数设为false时,该函数不会显示消息框,而是把调试信息输出到Visual C++的输出窗口。当我们不使用调试模式时,HR宏不执行任何代码。另外,HR必须是一个宏而不能是一个函数;否则__FILE__和__LINE__将无法引用调用HR宏的函数所在的文件和行。
图4.11:当Direct3D函数返回一个错误时,通过DXTrace函数显示消息框。
现在我们使用HR宏来包围返回HRESULT值的Direct3D函数,下面是一个例子:
HR(D3DX11CreateShaderResourceViewFromFile(md3dDevice, L"grass.dds", 0, 0, &mGrassTexRV, 0 ));
当我们调试演示程序时,这个宏可以很好地运作,但是对于一个实际的应用程序来说,我们应该使用更完善的错误处理机制。
注意:L#x将HR宏的参数转换成一个Unicode字符串。通过这一方式,我们可以把导致错误的函数调用语句输出到消息框上面。
0 0
- 4.5 调试DIRECT3D应用程序
- 4.5 调试DIRECT3D应用程序
- 4.5 调试Direct3D应用程序
- DirectX11 调试Direct3D应用程序
- 开启Direct3D调试模式
- Direct3D程序调试
- 学习Direct3D(五)应用程序入口
- Direct3D调试利器PIX Win简介
- Direct3D
- 应用程序调试
- 调试Release版本应用程序
- 调试分布式 Web 应用程序
- 调试Release版本应用程序
- 调试Release版本应用程序
- windbg调试应用程序
- 调试分布式 Web 应用程序
- 调试分布式 Web 应用程序
- 调试分布式 Web 应用程序
- 【性能测试】Jmeter测试之接口测试
- MIT的《深度学习》精读(6)
- 单列模式
- cgi-fastcgi
- Servlet返回JSON格式的数据
- 4.5 调试Direct3D应用程序
- Oracle 更新或者删除游标行
- html基础知识
- leetcode 1. Two Sum
- 【那些年遇到过的面试题】 struct和typedef struct的用法
- 面试基础
- 日常-request.getSession(false)和request.getSession(true)用法区别
- 安卓6.0相机权限完美解决
- Pop Sequence (25)