软件层(四)

Direct3D 11运行时由层构建,从核心的基本功能开始,在外层构建可选的和开发人员辅助的功能。本节描述每个层的功能。

一般来说,添加层能添加功能,但不修改现有的行为。例如,核心函数将返回相同的返回值,无论是否实例化调试层。调试层可以提供额外的输出。要在创建设备时创建层,请调用D3D11CreateDevice或D3D11CreateDeviceAndSwapChain,并提供一个或多个D3D11_CREATE_DEVICE_FLAG值。

Direct3D 11 提供一下运行时层:

  • 核心层
  • 调试层

核心层

核心层默认存在;在API和设备驱动之间提供一个映射关系,最小化高频调用。核心层主要关心的是性能,它仅仅执行验证。剩下的层是可选的。

调试层

调试层提供广泛的附加参数和一致性验证(例如验证着色器链接和资源绑定、验证参数一致性和报告错误描述)。

创建设备的时候要支持调试层,你必须安装DirectX SDK(获取D3D11SDKLayers.dll),然后调用D3D11CreateDevice或者D3D11CreateDeviceAndSwapChain函数时指定D3D11_CREATE_DEVICE_DEBUG标志。启用调试层将使你的程序变慢。

另外,您可以使用DirectX控制面板启用/禁用调试标志,该面板包含在DirectX SDK中。

当调试层列出内存泄漏时,它输出对象接口指针及其友好名称的列表。默认的友好名称是“<未命名的>”。您可以使用ID3D11DeviceChild::SetPrivateData方法和D3Dcommon.h中的WKPDID_D3DDebugObjectName GUID设置友好的名称。

例如,要使用mytexture.jpg的SDKLayer名称来命名pTexture,请使用以下代码:

const char c_szName[] = "mytexture.jpg";
pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值