zoukankan      html  css  js  c++  java
  • 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特效本身也是硬件加速的,所以全屏和窗口模式应该差别不大了。

  • 相关阅读:
    【alpha】Scrum站立会议第2次....10.17
    【alpha】Scrum站立会议第1次····10.16
    【week4】技术随笔psp
    【week4】课堂Scrum站立会议
    【week3】psp (技术随笔)
    【week3】四则运算 单元测试
    【week3】词频统计 单元测试
    Oracle Split字符串

    指针函数与指针数组
  • 原文地址:https://www.cnblogs.com/Liuwq/p/4659859.html
Copyright © 2011-2022 走看看