Direct3D 11 中的软件层

Direct3D 11 运行时由层(Layer)构成。

一条基本的准则是在层中添加功能,但不影响已存在的行为。举例来说,核心函数在独立的调试层中有相同的返回值,甚至还会有附加的调试信息。

可调用D3D11CreateDevice 或者 D3D11CreateDeviceAndSwapChain 并提供一个或多个D3D11_CREATE_DEVICE_FLAG值在创建device的同时创建层。

Direct3D 11 提供以下运行时层:

#核心层(Core Layer)

#调试层(Debug Layer)

Core Layer

核心层默认存在,在api和device之间提供一层很薄的映射,最小化高频率调用函数带来的性能影响。核心层的根本是效率,它只做必要的检查。剩下的层是可选的。

Debug Layer

该层提供大量额外的参数和一致性验证(诸如验证着色器连接和资源绑定,参数一致性,提交错误描述等)。

为了建立一个支持调试层的device,用户必须安装DirectX SDK(来获取D3D11SDKLayers.dll),然后在调用D3D11CreateDevice或者D3D11CreateDeviceAndSwapChain时指定D3D11_CREATE_DEVICE_DEBUG 标记

需要注意的是启用调式层后程序运行会大幅变慢。你可以使用SDK中的DirectX Control Panel来启用或者禁用调试层。当调式层列出内存泄漏时,输出的是一个关联着友好命名的接口指针列表。默认的友好命名是“<unnamed>”。你可以使用ID3D11DeviceChild::SetPrivateData和D3Dcommon.h中的WKPDID_D3DDebugObjectName GUID来设置友好命名。比如用mytexture.jpg命名一个pTexture指针,使用如下代码:

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

posted on   Meta.Grfx  阅读(907)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示