本文只是对官方文档做出简单的翻译 原文地址:Software Layers
Direct3D 11运行时是分层构造的,从核心的基本功能开始,在外部层中构建可选的功能和开发人员辅助功能。
通常,图层(layers)会添加功能(functionality),但不会修改现有行为。 例如,核心功能(core functions)将具有相同的返回值,而与要实例化的调试层无关,尽管如果实例化调试层,则可能会提供其他调试输出。
要在创建设备时创建图层(layers),请调用D3D11CreateDevice或D3D11CreateDeviceAndSwapChain并提供一个或多个D3D11_CREATE_DEVICE_FLAG值。
核心层(Core Layer)
核心层默认存在。在API和设备驱动程序之间提供映射,从而最大程度地减少了高频调用的开销。由于核心层对于性能至关重要,因此它仅执行关键验证。其余层是可选的。
调试层(Debug Layer)
调试层提供了广泛的附加参数和一致性验证(例如,验证着色器链接和资源绑定,验证参数一致性以及报告错误描述)。
若要创建支持调试层的设备,必须安装DirectX SDK(以获取D3D11SDKLayers.dll),然后在调用D3D11CreateDevice函数或D3D11CreateDeviceAndSwapChain函数时指定D3D11_CREATE_DEVICE_DEBUG标志。如果在启用调试层的情况下运行应用程序,则该应用程序的运行速度将大大降低。但是,要确保在发布应用程序之前清除其错误和警告,请使用调试层。有关更多信息,请参阅Using the debug layer to debug apps
或者,您可以使用DirectX SDK附带的DirectX控制面板来启用/禁用调试标志。
当调试层列出内存泄漏时,它将输出对象接口指针及其友好名称的列表。 默认的友好名称是“ ”。 您可以使用ID3D11DeviceChild :: SetPrivateData方法和D3Dcommon.h中的WKPDID_D3DDebugObjectName GUID来设置友好名称。
例如,要使用SDKLayer名称为mytexture.jpg来命名pTexture,请使用以下代码:
const char c_szName[] = "mytexture.jpg";
pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );