从win8开始,就增加了flip显示模型,通过该显示模型,程序可以减少系统开销,同时增加性能。基于intel media
sdk解码,d3d11渲染,在我自己的电脑上通过对比,该模型确实可以明显降低CPU负载,渲染时间几乎忽略不计。不过坑爹的是,在部分独显不同电脑上,该模型并没有发挥出来该有的作用,反而增加GPU很大的负载,得不偿失。在d3d12中只支持flip model渲染,我想这些坑爹的电脑也就不支持d3d12渲染显示了,没想到这个flip model跟显卡类型,驱动等关系很大。下面简单说下flip model渲染。

桌面窗口管理器

桌面窗口管理器是Vista以后的系统中的一个新组件:Desktop Window Manager(DWM)。常见的任务栏窗口的实时缩略图效果,aero效果都是是DWM提供的。DWM提供了基于硬件加速的渲染。DWM出现后,应用程序的显示不再是直接画到屏幕上,而是送到显存中的一个离屏Surface。DWM将这些Surface合成一幅图像显示到屏幕之上。所以现在我们看到的显示器所有内容都是DWM处理过的。

DXGI flip model 与BitBlt model对比

二者主要区别是后台缓冲如何送到WDM。对于bitblt model,调用一次IDXGISwapChain1::Present1,后台缓冲内容就被拷贝到DWM 中一个叫做redirection surface的地方。对于flip model,后台缓冲内容直接与DWM共享,少了拷贝操作,因此更高效。

如何使用

创建交换链时。DXGI_SWAP_CHAIN_DESC1结构体按如下要求填充:
1)SwapEffect:DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL
2)BufferCount:2
3)Format:DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_B8G8R8A8_UNORM,DXGI_FORMAT_R8G8B8A8_UNORM之一;
4)SampleDesc.Count :1;
5)SampleDesc.Quality:0。
每一次调用Present1前,都要调用一次ID3D11DeviceContext::OMSetRenderTargets,因为Present1后,系统会把RenderTargetView解绑,所以每次都需要再调用OMSetRenderTargets设置RenderTargetView

注意事项

1)一个窗口句柄只能绑定一个flip model交换链;
2)使用了flip model的句柄,就不能再使用其他api绘制了。在flip model中,只有flip model交换链传递到DWM中的Direct3D内容才可见,其他版本Direct3D 以及GDI内容更新将被忽略。

DXGI中的flip显示模型相关推荐

  1. Zk中组建显示模型mold都有哪些

    Zk中组建显示模型mold都有哪些? zk大部份组建都有一个mold属性,此为显示模型,显示模型类似windows主题.网站主题等 例如组 tabbox组建,有default mold和手风琴acco ...

  2. 在C++中加载TorchScript模型

    在C++中加载TorchScript模型 本教程已更新为可与PyTorch 1.2一起使用 顾名思义,PyTorch的主要接口是Python编程语言.尽管Python是合适于许多需要动态性和易于迭代的 ...

  3. 如何在FineUIMvc(ASP.NET MVC)视图中绑定多个模型?

    起因 这是知识星球内的一个网友提出的,按理说ASP.NET MVC中一个视图只能绑定一个模型(Model),在视图顶部标识如下: @model IEnumerable<FineUICore.Ex ...

  4. 三种方式实现观察者模式 及 Spring中的事件编程模型

    观察者模式可以说是众多设计模式中,最容易理解的设计模式之一了,观察者模式在Spring中也随处可见,面试的时候,面试官可能会问,嘿,你既然读过Spring源码,那你说说Spring中运用的设计模式吧, ...

  5. python短期预测图_Python中利用长短期记忆模型LSTM进行时间序列预测分析

    原文链接:http://tecdat.cn/?p=6663 此示例中,神经网络用于使用2011年4月至2013年2月期间的数据预测都柏林市议会公民办公室的能源消耗. 每日数据是通过总计每天提供的15分 ...

  6. html中内容超出显示省略号的方法

    html中内容超出显示省略号的方法 本博客主要介绍 前端开发中文本过多,以省略号显示. 效果如图:                 单行: <!--单行--> <p class=&q ...

  7. 理论与实践中的 C# 内存模型

    转载自:https://msdn.microsoft.com/magazine/jj863136 这是该系列(包含两部分内容)的第一部分,这部分将以较长的篇幅介绍 C# 内存模型. 第一部分说明 C# ...

  8. linux 读取内存颗粒,Linux中的内存管理模型浅析

    实际上这是一个内存方面的问题.要想研究这个问题,首先我们要将题目本身搞明白.由于我对Linux内核比较熟而对Windows的内存模型几乎毫不了解,因此在这篇文章中针对Linux环境对这个问题进行探讨. ...

  9. 【Pytorch神经网络理论篇】 39 Transformers库中的BERTology系列模型

    同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深 ...

  10. Revit中绘图填充与模型填充的区别

    一.Revit中绘图填充与模型填充的区别 在设完楼板的表现填充图案以后,在三潍视图中旋转模型,图案不跟随楼板旋转如图1所示.这种情况怎么解决? 遇到这种情况我们要知道绘图填充与模型填充的区别. (1) ...

最新文章

  1. python精简笔记(五)——函数式编程
  2. 自学python方法-零基础初学Python人工智能的四种学习方法
  3. 永动机之永动机的客观存在
  4. mysql性能优化教程_mysql性能优化教程
  5. MySQL修改字符集步骤(字段插入中文提示错误时解决办法)
  6. Java学习笔记(4)——枚举类型
  7. SQL Server系统数据库–主数据库
  8. 常见的立体匹配算法介绍
  9. c语言算术转换例子,关于C语言算术表达式中“寻常算术转换”的问题
  10. 如何画分子结构的立体图
  11. java pdf转png格式_如何在Java中将PDF转换为PNG或JPG
  12. Python查询快递订单信息
  13. echarts3在Y轴上做基准线
  14. 博达路由器如何配置互联网ip_博达路由器操作命令
  15. mysql数据库练习作业
  16. 一种基于Tent混沌映射初始化种群的改进灰狼算法
  17. 续.第一次冲刺之后.
  18. sql 汉字按照首字母排序
  19. 机器学习—— SVM分类垃圾短信
  20. 在英特尔硬件上部署深度学习模型的无代码方法 OpenVINO 深度学习工作台的三部分系列文章 - CPU AI 第一部

热门文章

  1. SSD目标检测论文简读
  2. Linux E: 无法定位软件包
  3. 小程序图片上传formdata boundary + base64
  4. 二级等保和三级等保区别,企业单位要做几级?甜甜告诉您
  5. jsmind源码初探
  6. python tk隐藏窗口_显示tkinter消息框时,隐藏root窗口
  7. vue 创建项目时报错yorkie: Command failed.
  8. 机器学习常见概率模型
  9. 设置idea类注释模板
  10. 六自由度机械臂运动学分析及其轨迹规划