文章目录

  • 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图形基础结构,功能支持检测,资源驻留相关推荐

  1. WIN10计算机不支持3D游戏怎么办,Win10系统玩游戏提示显卡不支持3d图形加速功能如何解决...

    有很多用户都已经升级安装win10系统,但是在使用的时候可能碰到一些问题,就是有不少用户在玩游戏的时候,提示"您的显卡不支持3D图形加速功能,无法正常启动游戏,您可尝试更新显卡驱动程序&qu ...

  2. DirectX 图形接口指南

    这些指南是我在阅读 DirectX9.0 SDK 中逐步翻译出来的.对于初次接触 DirectX Graphics 的编程者而言,这应该是很好的上手资料.其实,本人就是从这些指南开始深入 Direct ...

  3. c语言图形方式初始化,c语言图形方式下的编程.doc

    c语言图形方式下的编程.doc C语言图形方式下的编程 学习目标 ·了解PC显示系统的结构 ·C语言图形初始化的一般方法 ·C语言常用的图形处理函数 显示系统简介 PC机显示系统一般是由显示器和显示卡 ...

  4. Android 百度地图开发(三)--- 实现比例尺功能和替换自带的缩放组件

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/11821523 貌似有些天没有写博客了,前段时间在忙找工作的事,面试了几家公司,表示反响 ...

  5. ArcGIS Maritime Server 开发教程(三)Maritime Service 功能解读

    ArcGIS Maritime Server 开发教程(三)Maritime Service 功能解读 本章导读:ArcGIS Maritime Server 能够以极简的方式发布海图服务,其服务的标 ...

  6. js实现日历框上一日下一日_一日三项令人兴奋的Lucene功能

    js实现日历框上一日下一日 昨天是富有成效的一天:突然,Lucene有了三个令人兴奋的新功能. 表达式模块 昨天提交的第一个功能是新的expressions模块 . 这使您可以使用任意String表达 ...

  7. 一日三项令人兴奋的Lucene功能

    昨天是富有成效的一天:突然,Lucene有了三个令人兴奋的新功能. 表达式模块 昨天提交的第一个功能是新的expressions模块 . 这使您可以使用任意String表达式定义用于排序的动态字段. ...

  8. 实验4 基于预测分析表法的语法分析程序_第三十届 脑功能磁共振数据处理分析培训班...

    北京赛博尔医药科技有限公司(www.cibrmed.com)将于2019年 7月6日 至 2019年7月11日(周六至下周四)举办第三十届脑功能磁共振数据处理分析培训班(课程内容详见课表安排).欢迎大 ...

  9. matlab 图形绘制,MatLab图形绘制功能

    MatLab图形绘制功能 MatLab % 0到10的1000个点的x座标 y=sin(x); % 对应的y座标 plot(x,y); % 绘图 Y=sin(10*x); plot(x,y, r: , ...

  10. 使用PongoOS读取苹果ARM64 CPU功能支持寄存器

    前言 苹果自A6开始采用定制CPU核心,A7是全球第一款使用64位ARM的处理器.苹果CPU性能一直领先高通,必有一定的原因.通过读取ARM64 ID registers,或许能侧面揭晓一些答案. P ...

最新文章

  1. 在红帽中安装oracle,在红帽企业Linux 5.4中安装Oracle Database 10g
  2. jQuery实现id模糊查询
  3. 洛谷 P1219 八皇后题解
  4. 物联网学习之路——物联网通信技术:NBIoT
  5. AWS Ubuntu 18.04 镜像采用滚动内核模型
  6. 大数据失败案例之七宗罪
  7. static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?...
  8. ActionItemBadge:在actionbar上显示badge数字提示
  9. 同一台电脑管理多个`SSH KEY`
  10. mysql 导入导出 备份_MySQL - 数据备份与还原(导出导入)
  11. 不用找,你想要的凹凸贴图素材都在这里
  12. 协议和代理模式的概念
  13. 级数ex展开_方亚斌---用ex的幂级数展开式编拟高考题
  14. Linux基础-进程管理
  15. 8、ARM嵌入式系统:UART初始化
  16. outputdebugstring函数的封装
  17. 锂离子电池是由什么组成的
  18. CStyle足迹:一个BIOS人的成长日记之开篇
  19. 好好学习,天天向上——“C”
  20. 【光学设计基础】--02球差

热门文章

  1. Port Security (端口安全)
  2. 二维数组传参,用int指针接收
  3. 【leetcode-652】寻找重复的子树
  4. H3C的认证有用吗?对我来说有什么帮助?
  5. 3C和CE认证的区别
  6. 高斯消元(解线性方程组)
  7. 伽罗华有限域_信息论与编码:有限域
  8. 知道如何防止域名被封,干货!赶紧收藏
  9. 概率论与数理统计学习笔记——6.2统计量
  10. 史上最美八大隶书,你都临过吗?