GDI与DirectDraw之间的区别

n567656756765676567 2012-02-23 08:05:55
如题:
gdi的调用过程,directdraw的调用过程,各是怎么样的????????
视频在显示器上播放,每次都刷新,那是什么原理让directdraw能画出图像覆盖在视频上?
请高手讲解!!!!!!!!
...全文
682 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
虽然最后一个问题没人回答,不过依然感谢!
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bluewanderer 的回复:]
不是。

GDI和DDraw都是会把显存映射到内存上的(事实上这个映射和GDI、DDraw这些东西没关系,是显卡驱动干的,所以32位系统不开PAE你装1G显存的显卡就会发现物理内存就无论如何也超不过3G了)

GDI只要不涉及位图的操作都是直接告诉显卡要画什么,CPU不会自己操作显存。但是如果是画位图,GDI就会通过CPU的内存操作把内存中的位图复制到显存里(可能也就是你理解的DDraw的……
[/Quote]
那有个问题啊,比如pc机上有张图片,我想用DDraw显示在显示屏上,那不是也必须要先将图片文件读取到内存中, 然后通过内存转到显卡内存中吗? 这点我很不理解,如果是这样的话,那和GDI就一样了。。。
bluewanderer 2012-03-06
  • 打赏
  • 举报
回复
不是。

GDI和DDraw都是会把显存映射到内存上的(事实上这个映射和GDI、DDraw这些东西没关系,是显卡驱动干的,所以32位系统不开PAE你装1G显存的显卡就会发现物理内存就无论如何也超不过3G了)

GDI只要不涉及位图的操作都是直接告诉显卡要画什么,CPU不会自己操作显存。但是如果是画位图,GDI就会通过CPU的内存操作把内存中的位图复制到显存里(可能也就是你理解的DDraw的行为)

而DDraw操作位图是直接告诉显卡把哪部分显存内容复制到显示区域,CPU不会自己操作显存。但是相应的DDraw只能操作位图。
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bluewanderer 的回复:]
以前2D游戏区别于桌面应用主要在于有大量的位图复制操作,因为游戏里的内容都是事先生成好的位图,而桌面应用的内容往往是现画的。

GDI的硬件加速主要在画线、画圆、写字这些操作上,而画位图的时候,GDI的重大缺陷就是位图必须保存在内存里。虽然GDI画位图也是显卡加速的,但是位图数据必须通过速度相对来说很慢的前端总线传到显卡上。

而DDraw最核心的功能就是可以把位图直接保存在显存中,画位图……
[/Quote]

哦, 那可以这样说DDraw直接将显存映射到内存中,即我们只要填充那个内存结构,就可直接将位图显示出来。
而GDI, 是先画好在内存中,然后再复制到显存中,是吧???
bluewanderer 2012-03-05
  • 打赏
  • 举报
回复
首先这两个都过时了,特别是DirectDraw。

当年这两个都是用显卡加速的,区别最主要的是DirectDraw支持显存位图,GDI里位图只能在内存里,另外DirectDraw处理方式更贴近硬件,所以杂七杂八的事少,也就更快。Windows Vista开始GDI丧失显卡加速,虽然Win7又恢复了一点,但是还是没有往日荣光。DirectDraw这东西10年前就被Direct 3D掩埋了,DirectX 7开始D3D不再依赖DDraw,DirectX 8开始DDraw不再更新。
bluewanderer 2012-03-05
  • 打赏
  • 举报
回复
以前2D游戏区别于桌面应用主要在于有大量的位图复制操作,因为游戏里的内容都是事先生成好的位图,而桌面应用的内容往往是现画的。

GDI的硬件加速主要在画线、画圆、写字这些操作上,而画位图的时候,GDI的重大缺陷就是位图必须保存在内存里。虽然GDI画位图也是显卡加速的,但是位图数据必须通过速度相对来说很慢的前端总线传到显卡上。

而DDraw最核心的功能就是可以把位图直接保存在显存中,画位图的时候直接在显存中复制,通过带宽非常大的显卡内部总线。

比如你画一棵树,GDI每画一次就要从内存到显卡复制一次。而用DDraw之需要复制一次,以后都是在显存内操作了所以快。

但是于此同时DDraw舍弃了GDI的画线、画圆、写字乃至缩放位图等等的功能,所以渐渐被可以实现那些操作的D3D取代了。
ppsharp 2012-03-05
  • 打赏
  • 举报
回复
DirectDraw可以提供给开发者代表了真实显示内存的绘图页面。这意味着,只要你使用了DirectDraw,你就可以直接操纵显卡上的内存,图形显示变得出奇的快速。而且这些页面代表了显存中连续的内存块,使得在页面中寻址和读写变得非常方便。

直接百度 google不是更快吗?
  • 打赏
  • 举报
回复
别让此贴沉没啊。。。。顶一个先,高手快快现身,分都给你了,不想无结果结贴啊
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bluewanderer 的回复:]
首先这两个都过时了,特别是DirectDraw。

当年这两个都是用显卡加速的,区别最主要的是DirectDraw支持显存位图,GDI里位图只能在内存里,另外DirectDraw处理方式更贴近硬件,所以杂七杂八的事少,也就更快。Windows Vista开始GDI丧失显卡加速,虽然Win7又恢复了一点,但是还是没有往日荣光。DirectDraw这东西10年前就被Direct 3D掩埋了,Dir……
[/Quote]
DirectDraw是将图片的数据直接拷贝到显卡内存上,而GDI呢??? 是怎么样的? 我知道DirectDraw会比较快, 但不知快在哪里? 我想知道更深层的原因。。。
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ppsharp 的回复:]
DirectDraw可以提供给开发者代表了真实显示内存的绘图页面。这意味着,只要你使用了DirectDraw,你就可以直接操纵显卡上的内存,图形显示变得出奇的快速。而且这些页面代表了显存中连续的内存块,使得在页面中寻址和读写变得非常方便。
[/Quote]
DirectDraw是将图片的数据直接拷贝到显卡内存上,而GDI呢??? 是怎么样的? 我知道DirectDraw会比较快, 但不知快在哪里? 我想知道更深层的原因。。。
  • 打赏
  • 举报
回复
gdi为什么比directdraw慢, directdraw是直接将数据拷贝到显存中,那 gdi呢?

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧