剑痴乎

剑痴乎
代码为剑,如痴如醉
  1. 首页
  2. Windows
  3. 正文

DXGI中的flip显示模型

2017年9月28日 2770点热度 9人点赞 0条评论

从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-flip-model

如何使用

创建交换链时。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内容更新将被忽略。

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可
标签: windows
最后更新:2019年3月26日

Jeff

管理员——代码为剑,如痴如醉

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理。

版权声明

为支持原创,创作更好的文章,未经许可,禁止任何形式的转载与抄袭,如需转载请邮件私信!本人保留所有法定权利。违者必究!

文章目录
  • 桌面窗口管理器
  • DXGI flip model 与BitBlt model对比
  • 如何使用
  • 注意事项
最近评论
ztt 发布于 3 周前(04月05日) 你好,想看里面的视频和图片为什么没有显示呢?需要下flash吗还是什么。
huowa222 发布于 4 周前(03月26日) 同问
邱国禄 发布于 2 个月前(02月17日) Receive Delta以0.25ms为单位,reference time以64ms为单位,kDe...
啊非 发布于 4 个月前(12月30日) 大神,请教一个问题: constexpr int kBaseScaleFactor = Tran...
啊非 发布于 4 个月前(12月30日) reference time:3字节,表示参考时间,以64ms为单位,但是 代码里面是 Trans...
相关文章
  • FireBreath插件IE浏览器中文字符乱码问题
  • Win10任务管理器GPU信息
  • CreateSwapChainForHwnd返回0x887A0001错误
  • DirectX 9 到DirectX 11 API的对应
  • 为什么Windows下无法实现ptp协议

COPYRIGHT © 2024 jianchihu.net. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang