【转载】DXUT11框架浅析(4)--调试相关
DXUT11框架浅析(4)--调试相关
1. D3D8/9和D3D10/11的调试区别
只要安装了DXSDK,有个调试工具DirectX ControlPanel,如下图所示。这里可以将Direct3D 9设置为调试运行时(Debug D3D9 Runtime)或零售运行时(RetailD3D9 Runtime)。注意这里的设置是全局的,如果改成调试运行时,则所有用到D3D9的程序都会进入调试模式,这会使这些程序运行的很慢。
从Vista开始系统自己的界面都使用D3D做渲染,从而必须改变上面的方法,否则系统很容易卡死。从Direct3D 10.0开始,采用了API分层机制,从而有了SDK Debug Layer用于调试。如果需要调试程序,可以在创建D3D设备时使用D3Dxx_CREATE_DEVICE_DEBUG标记或用上面的Control Panel工具把要调试的程序加入调试列表:
2. 调试信息输出函数
下面的函数在DXUTmisc.h中定义:
- void WINAPI DXUTOutputDebugStringW( LPCWSTRstrMsg, ... );
- void WINAPI DXUTOutputDebugStringA( LPCSTRstrMsg, ... );
- #ifdef UNICODE
- #define DXUTOutputDebugString DXUTOutputDebugStringW
- #else
- #define DXUTOutputDebugString DXUTOutputDebugStringA
- #endif
格式化字符串并通过调用API函数OutputDebugString打印调试信息。比如我们在EmptyProject11这个sample的OnD3D11FrameRender中写一句:
DXUTOutputDebugString(L"Test测试\n" );
调试运行,每当运行到这句时,在Output窗口中都会打印出这个调试信息:
3. D3D结构转成字符串以便于显示
- void WINAPI DXUTTraceDecl( D3DVERTEXELEMENT9decl[MAX_FVF_DECL_SIZE]);
- WCHAR* WINAPI DXUTTraceD3DDECLUSAGEtoString( BYTE u );
- WCHAR* WINAPI DXUTTraceD3DDECLMETHODtoString( BYTE m );
- WCHAR* WINAPI DXUTTraceD3DDECLTYPEtoString( BYTE t );
- WCHAR* WINAPI DXUTTraceWindowsMessage( UINTuMsg );
4. D3D10以上版本调试信息
- void DXUT_SetDebugName( IDirect3DResource9* pObj,const CHAR* pstrName )
- void DXUT_SetDebugName( IDXGIObject* pObj,const CHAR* pstrName )
- void DXUT_SetDebugName( ID3D10Device* pObj,const CHAR* pstrName )
- void DXUT_SetDebugName( ID3D10DeviceChild* pObj,const CHAR* pstrName )
- void DXUT_SetDebugName( ID3D11Device* pObj,const CHAR* pstrName )
- void DXUT_SetDebugName( ID3D11DeviceChild* pObj,const CHAR* pstrName )<span style="font-size:18px;">
- </span>
为对象指定一个易读的名称,在调试层出现内存泄漏时,可以很容易看到哪个对象出的问题。
5. PIX辅助调试
- #ifdef PROFILE
- // PROFILE is defined, so these macros call the D3DPERFfunctions
- #define DXUT_BeginPerfEvent( color, pstrMessage) DXUT_Dynamic_D3DPERF_BeginEvent(color, pstrMessage)
- #define DXUT_EndPerfEvent() DXUT_Dynamic_D3DPERF_EndEvent()
- #define DXUT_SetPerfMarker( color, pstrMessage) DXUT_Dynamic_D3DPERF_SetMarker(color, pstrMessage)
- #else
- // PROFILE is not defined, so these macros do nothing
- #define DXUT_BeginPerfEvent( color, pstrMessage) (__noop)
- #define DXUT_EndPerfEvent() (__noop)
- #define DXUT_SetPerfMarker( color, pstrMessage) (__noop)
- #endif
- class CDXUTPerfEventGenerator
这里实现对D3DPERF_BeginEvent、D3DPERF_BeginEvent、和D3DPERF_BeginEvent三个API的简化使用的封装。主要用于PIX调试Direct3D程序。CDXUTPerfEventGenerator通过类的方式简化了D3DPERF_BeginEvent和D3DPERF_BeginEvent需要配对调用的实现。
参考资料
http://blogs.msdn.com/b/chuckw/archive/2012/11/30/direct3d-sdk-debug-layer-tricks.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/ff476881(v=vs.85).aspx#Debug
【转载】DXUT11框架浅析(4)--调试相关的更多相关文章
- CI框架浅析
CI框架浅析(全篇) 业余花了点时间看看CodeIgniter框架(简称CI),CI目前的稳定版本是 3.X,4.0版本已经出来了,但还在测试中,所以我分析的还是 3.x 版本. CI是一个很 ...
- MVC框架浅析(基于PHP)
MVC框架浅析(基于PHP) MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数 ...
- CI框架浅析(二)
该文延续上篇文章: CI框架浅析(一) 在CI框架的核心库中,CodeIgniter.php负责加载所有需要的类库,第一个加载的是公共库 core/Common.php Common.php 负责加载 ...
- Android Otto框架浅析
今天要介绍的是一个Android中使用得比較多的android 事件总线 EventBus模式的一个框架Otto. Otto 官网:http://square.github.io/otto/ 一.An ...
- Python的Django框架中的Cookie相关处理
Python的Django框架中的Cookie相关处理 浏览器的开发人员在非常早的时候就已经意识到. HTTP's 的无状态会对Web开发人员带来非常大的问题,于是(cookies)应运而生. coo ...
- Eclipse调试相关
Eclipse调试相关 F5 step into就是单步执行,遇到子函数就进入并且继续单步执行. F6 step over是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个 ...
- 转载文章----.NET 框架浅析
转载地址:http://www.cnblogs.com/yangmingming/archive/2010/01/27/1657850.html .NET 框架概要: .NET框架,即.NET Fra ...
- 【转载】.NET 框架浅析
经过了对C#较长时间的学习以及实践,不断地感受着.NET 框架--这个最本质,然而却似乎让人捉摸不透的概念.特别是经过拜读Anytao博主的<你必须知道的.NET>文章,使我对其概念关系得 ...
- OSGI.NET 框架浅析
关于osgi.net ,想必大家也听说过,以下是自己在学习osgi.net 过程中整理出来的内容,供大家学习参与使用. 1. UIOSP 开放工厂框架架构 开放工厂所有插件基于OSGi.NET面向服 ...
随机推荐
- 原生js模仿jq fadeIn fadeOut效果 兼容IE低版本
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- A blog about Core Animation and other iOS graphics framework
A blog about Core Animation and other iOS graphics frameworks. https://www.calayer.com/
- WebUploader 图片上传控件使用范例
官网 http://fex.baidu.com/webuploader/getting-started.html 其实官网写的挺详细的,看官网也可以了. 引入资源 使用Web Uploader文件上 ...
- 【[SCOI2009]迷路】
大水题一遍 过掉比较繁琐的拆点还是非常开心的 发现每一条边的边权可能不是\(1\),但是边权的范围非常小,同时点数也非常小,只有\(n<=10\),所以我们可以将一个点拆成九个点,之后随便一连边 ...
- 【[SHOI2007]善意的投票】
直接是最小割啊 设最终还和\(S\)相连表示睡觉,和\(T\)相连表示不睡觉 如果这个人想睡觉,那么就从源点向它连\(1\)的边,表示割掉这条边选择不睡觉的代价为1 如果这个人不想睡觉的话,就向汇点连 ...
- win10中显示资源管理器扩展
一年前从有两台机器win7升级到win10,一台上装了我常用的资源管理器扩展setExBar,但另一台没有.升级后原来有插件的依然默认显示插件,我在另一台机器上安装了setExBar时默认不显示.如果 ...
- Java clone() 浅克隆与深度克隆
内容转自:http://www.blogjava.net/orangelizq/archive/2007/10/17/153573.html 现在Clone已经不是一个新鲜词语了,伴随着“多莉”的产生 ...
- 字符型设备驱动程序-first-printf以及点亮LED灯(三)
根据 字符型设备驱动程序-first-printf以及点亮LED灯(二) 学习 修改函数 中的printf 为 printk. #include <linux/module.h> /* ...
- Spring+Hibernate+struts2+JPA 注解+跨域//完成手机端点击加载更多 下拉加载更多
一.使用IDEA新建一个maven项目(student) 1.1.0编写pom文件,添加项目所需要的包 <?xml version="1.0" encoding=" ...
- 【转】:Oracle Linux6.9下安装Oracle 11.2.0.4.0及psu补丁升级
为方便截图,本文操作都在vmware虚拟机上完成. 目录: 1.操作系统安装 2.数据库安装 3.PSU补丁升级卸载 part1 操作系统安装 Oracle (Enterprise) Linux ...