DirectX12初始化三——DirectX图形基础结构,功能支持检测,资源驻留
文章目录
- DiretX图形基础结构
- 功能支持的检测
- 资源驻留
DiretX图形基础结构
DirectX图形基础结构(DXGI)。是一种与DirectX3D配合只用的API。DXGI的基本理念是使多种图形API所共有的底层任务能借助一组通用API来进行处理。
IDXGIFactory就只DXGI的关键接口之一。主要用于创建IDXGISwapChain接口以及枚举显示适配器。
显示适配器就是一种硬件设备,例如独立显卡,系统也可以使用模拟的软件显示适配器。适配器用接口IDXGIAdapter表示。
以下代码会显示出系统中所有适配器,包括软件适配器。
void D3DApp::LogAdapters() //枚举一个系统中所有的显示适配器(显卡),也可以用软件显示适配器模拟显卡
{UINT i = 0; //IDXGIAdapter* adapter = nullptr; //IDXGIAdapter接口,用来表示显示适配器std::vector<IDXGIAdapter*> adapterList; //显示适配器列表while (mdxgiFactory->EnumAdapters(i, &adapter) != DXGI_ERROR_NOT_FOUND) //EnumAdapter方法,枚举显示适配器{DXGI_ADAPTER_DESC desc; //使用 DXGI 1.0 描述适配器(或视频卡)。adapter->GetDesc(&desc); //GetDesc()方法,获得显示适配器的描述,例如显卡型号std::wstring text = L"***Adapter: ";text += desc.Description; //包含适配器描述的字符串。类型是WCHAR[128]text += L"\n";OutputDebugString(text.c_str()); //将字符串发送到调试器进行显示。adapterList.push_back(adapter); //将显示适配器加入适配器列表++i; //索引增加}for (size_t i = 0; i < adapterList.size(); ++i){LogAdapterOutputs(adapterList[i]); //枚举与某块适配器关联的所有显示输出ReleaseCom(adapterList[i]);}}
void D3DApp::LogAdapterOutputs(IDXGIAdapter* adapter) //枚举出与某块适配器关联的所有显示输出
{UINT i = 0;IDXGIOutput* output = nullptr; //IDXGIOutput表示适配器输出,例如监视器,显示器while (adapter->EnumOutputs(i, &output) != DXGI_ERROR_NOT_FOUND) //枚举适配器输出{DXGI_OUTPUT_DESC desc; //描述适配器(视频卡)和设备之间的输出或物理连接output->GetDesc(&desc);//GetDesc()方法,获得输出的描述std::wstring text = L"***Output";text += desc.DeviceName; //包含输出设备名称的字符串text += L"\n";OutputDebugString(text.c_str());LogOutputDisplayModes(output, mBackBufferFormat);ReleaseCom(output);++i;}}
以下代码获得某个显示输出对此格式所支持的全部显示模式。
void D3DApp::LogOutputDisplayModes(IDXGIOutput* output, DXGI_FORMAT format)//获得某个显示输出对此格式所支持的全部显示模式
{UINT count = 0;UINT flags = 0;output->GetDisplayModeList(format, flags, &count, nullptr); //这个 API 被设计为被调用两次。首先获取可用模式的数量count//DXGI_MODE_DESC结构体用来存储显示模式的信息std::vector<DXGI_MODE_DESC> modelist(count); //显示模式列表output->GetDisplayModeList(format, flags, &count, &modelist[0]);//GetDisplayModeList方法用来获取与请求的格式和其他输入选项匹配的显示模式。for (auto& x : modelist){//RefreshRate代表一个有理数,这里以赫兹为单位表示刷新率UINT n = x.RefreshRate.Numerator; //无符号整数,代表有理数顶部UINT d = x.RefreshRate.Denominator;//无符号整数,代表有理数底部std::wstring text =L"Width = " + std::to_wstring(x.Width) + L" " +L"Height = " + std::to_wstring(x.Height) + L" " +L"Refresh = " + std::to_wstring(n) + L"/" + std::to_wstring(d) +L"\n";OutputDebugString(text.c_str());}}
以上代码中的各种结构体、方法、函数、数据类型等都可以在微软官方文档里面查询详细解释,我是每一个未知的类型都查询并理解了的。
功能支持的检测
前面检测对多重采样的支持的时候,我们使用了ID3D12Device::CheckFeatureSupport方法,此方法不止可以检测多重采样,还可以检测对其他功能的支持,具体可查看SDK文档(https://docs.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d12-id3d12device-checkfeaturesupport)
资源驻留
复杂游戏会有大量的纹理和3D网格资源,但是大部分资源并不会立即用到,也就不需要存在显存中供GPU使用。DirectX12可以主动控制资源在显存中的去留,这就是资源驻留。使用ID3D12Device::MakeResident方法或者ID3D12Device::Evict方法。具体访问https://docs.microsoft.com/zh-cn/windows/win32/direct3d12/residency 。
DirectX12初始化三——DirectX图形基础结构,功能支持检测,资源驻留相关推荐
- WIN10计算机不支持3D游戏怎么办,Win10系统玩游戏提示显卡不支持3d图形加速功能如何解决...
有很多用户都已经升级安装win10系统,但是在使用的时候可能碰到一些问题,就是有不少用户在玩游戏的时候,提示"您的显卡不支持3D图形加速功能,无法正常启动游戏,您可尝试更新显卡驱动程序&qu ...
- DirectX 图形接口指南
这些指南是我在阅读 DirectX9.0 SDK 中逐步翻译出来的.对于初次接触 DirectX Graphics 的编程者而言,这应该是很好的上手资料.其实,本人就是从这些指南开始深入 Direct ...
- c语言图形方式初始化,c语言图形方式下的编程.doc
c语言图形方式下的编程.doc C语言图形方式下的编程 学习目标 ·了解PC显示系统的结构 ·C语言图形初始化的一般方法 ·C语言常用的图形处理函数 显示系统简介 PC机显示系统一般是由显示器和显示卡 ...
- Android 百度地图开发(三)--- 实现比例尺功能和替换自带的缩放组件
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/11821523 貌似有些天没有写博客了,前段时间在忙找工作的事,面试了几家公司,表示反响 ...
- ArcGIS Maritime Server 开发教程(三)Maritime Service 功能解读
ArcGIS Maritime Server 开发教程(三)Maritime Service 功能解读 本章导读:ArcGIS Maritime Server 能够以极简的方式发布海图服务,其服务的标 ...
- js实现日历框上一日下一日_一日三项令人兴奋的Lucene功能
js实现日历框上一日下一日 昨天是富有成效的一天:突然,Lucene有了三个令人兴奋的新功能. 表达式模块 昨天提交的第一个功能是新的expressions模块 . 这使您可以使用任意String表达 ...
- 一日三项令人兴奋的Lucene功能
昨天是富有成效的一天:突然,Lucene有了三个令人兴奋的新功能. 表达式模块 昨天提交的第一个功能是新的expressions模块 . 这使您可以使用任意String表达式定义用于排序的动态字段. ...
- 实验4 基于预测分析表法的语法分析程序_第三十届 脑功能磁共振数据处理分析培训班...
北京赛博尔医药科技有限公司(www.cibrmed.com)将于2019年 7月6日 至 2019年7月11日(周六至下周四)举办第三十届脑功能磁共振数据处理分析培训班(课程内容详见课表安排).欢迎大 ...
- matlab 图形绘制,MatLab图形绘制功能
MatLab图形绘制功能 MatLab % 0到10的1000个点的x座标 y=sin(x); % 对应的y座标 plot(x,y); % 绘图 Y=sin(10*x); plot(x,y, r: , ...
- 使用PongoOS读取苹果ARM64 CPU功能支持寄存器
前言 苹果自A6开始采用定制CPU核心,A7是全球第一款使用64位ARM的处理器.苹果CPU性能一直领先高通,必有一定的原因.通过读取ARM64 ID registers,或许能侧面揭晓一些答案. P ...
最新文章
- 在红帽中安装oracle,在红帽企业Linux 5.4中安装Oracle Database 10g
- jQuery实现id模糊查询
- 洛谷 P1219 八皇后题解
- 物联网学习之路——物联网通信技术:NBIoT
- AWS Ubuntu 18.04 镜像采用滚动内核模型
- 大数据失败案例之七宗罪
- static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?...
- ActionItemBadge:在actionbar上显示badge数字提示
- 同一台电脑管理多个`SSH KEY`
- mysql 导入导出 备份_MySQL - 数据备份与还原(导出导入)
- 不用找,你想要的凹凸贴图素材都在这里
- 协议和代理模式的概念
- 级数ex展开_方亚斌---用ex的幂级数展开式编拟高考题
- Linux基础-进程管理
- 8、ARM嵌入式系统:UART初始化
- outputdebugstring函数的封装
- 锂离子电池是由什么组成的
- CStyle足迹:一个BIOS人的成长日记之开篇
- 好好学习,天天向上——“C”
- 【光学设计基础】--02球差