GPU渲染和GDI

   要实现这样一段逻辑,用GPU画3D图,用GDI画二维图元,怎么样效率高。相传Vista年代,是这样干的:

  1. 硬件渲染的东西在GPU上做完
  2. 读回CPU端
  3. 把GDI这些用软件渲染
  4. 两者混合
  5. 拷贝到显存显示

这样的话,相当于整个屏幕都要维持2份拷贝,并且要互相同步。早期的vista驱动上,D3D/OGL和GDI混合使用的话闪得要死或者慢的要死,就是这个原因。

于是新的wddm要求驱动提供overlay和blt,所以流程变得很简单高效:

  1. 硬件渲染的东西在GPU上做完
  2. 把GDI这些用软件渲染
  3. BitBlt到GPU端作为overlay

这样只需要在GPU端维护一份屏幕拷贝,CPU端只需要短暂地维护一个局部GDI的内容就可以了。

这也解释了为什么过去大型游戏在窗口模式下渲染比较慢,而全屏模式下比较快。全屏模式下,显卡是独占的,而且不需要与其他桌面程序(任务栏等 )和其他窗口坐混合,甚至桌面占用的内存也会被释放,记得曾经我的老爷机退出大型游戏时,窗口黑屏,接着慢慢刷出背景和桌面图标,大概就是这么个人道理吧。Win7 时代不一样了,GDI可以blit到显存,而Aero特效本身也是硬件加速的,所以全屏和窗口模式应该差别不大了。

转载于:https://www.cnblogs.com/Liuwq/p/4659859.html

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值