最全面、最前沿、最专业的游戏研发实战

提供最全面的游戏研发技能分享,让您在最短时间变成高级游戏工程师

查看:0|回复:3

【行业】对一个2D的游戏,DirectX和GDI+的性能差别大吗?

 attach_img

6

帖子

8

回复

13

积分
最后登录:
2025-03-30 17:37
注册时间:
2023-02-26 14:02
楼主
  发表于:2025-03-30 19:21:15|查看用户信息

我正在不借助游戏引擎制作一款类似于泡泡堂的游戏,由于将来可能会加入大厅之类的东西,需要用文本框之类的控件,所以没有用Windows API,使用了MFC框架(去掉了文档/视图支持),更新机制是用一个Timer每隔一段时间发一个WM_TIMER消息,在消息处理中更新并重绘;

目前在绘图中主要采用的是GDI+,就是用CImage::Draw函数绘图的,然后我发现在把WM_TIMER的间隔设置到非常短(1ms),并且现在还没加什么复杂功能(基本也就是人物走一走)的情况下,游戏只能跑到30帧出头(我将两次重绘之间的时间差输出了出来,显示为32ms),我觉得这是不是有点不太正常?(我能确定不是更新游戏数据的时候占了特别长的时间)

对于这个纯2D的游戏,如果把绘图部分改用DirectX(DirectX似乎有一个ID3DXSprite类)实现的话,对性能的提升大吗?

谢谢~

如果需要看代码、输出以及VS的性能分析(VS对于MFC的性能分析我有点看不懂)什么的话,我可以贴上来,有可能也有程序上我写错的地方或者输出上我理解错的地方,请各位巨巨多指教!


3

帖子

7

回复

9

积分
最后登录:
2025-03-30 17:43
注册时间:
2024-07-11 15:29
1 楼
  发表于:2025-03-30 19:23:46|查看用户信息

通常DirectX比GDI帧率高三倍以上

微软最早的DirectX文档中提到,使用DirectX后游戏2D渲染性能会提升到3倍。当时的显卡普遍还没有3D渲染能力,性能都比较低。


2D画面如果没有全屏滚动的话,DirectX和GUI视觉上差别不大。像纸牌、扫雷、Iwanna这类的。


但有全屏滚动的话,DirectX可以比GDI快三倍-几十倍。现在的显卡加速比当初更强了,还可以用3D技术来渲染2D(API已经并入)。而显卡的3D渲染性能比早期已经提升了10000倍,远远超过CPU性能的增幅。


通常来说,GDI/GDI+火力全开也不能满足全屏平滑滚动,包括帧同步等问题。GDI是在内存中绘图,然后再传入显存,最后显示出来。DirectX当初出现,就是为了Windows在游戏中绘图太慢专门开发的。Windows不允许直接读写显存(DOS下可以,因此Windows出现很久后游戏都是DOS的),DirectX提供了直接利用显存绘图的API。这样节省了一个步骤,直接就带来三倍的性能提升。

1.jpg


现在,商业桌面游戏软件几乎都是基于DirectX开发的,即使不滚屏。自己写的话,用DirectX也要不断优化,否则还是可能会有瓶颈。时钟的最小精度好像是17ms,不适合于游戏。


业余开发游戏自己玩可以考虑用WPF,也是用DirectX渲染的。但属于不完全封装,渲染性能介于DirectX和GUI之间,资源占用非常大效率很低。滚动画面比GDI快很多,分发需要安装.net库。还可以用XNA进一步优化,要多安装一个XNA库。


当然更方便和流行的方式,还是借助一个游戏引擎来开发。


2

帖子

4

回复

6

积分
最后登录:
2025-03-30 18:39
注册时间:
2023-02-26 14:02
2 楼
  发表于:2025-03-30 21:34:56|查看用户信息

一个工作区在cpu和内存,一个在gpu和显存,没有可比性,direct3d可以支持60帧以上图形绘制,gdi不行,15帧都卡爆你。

5

帖子

3

回复

7

积分
最后登录:
2025-03-30 20:44
注册时间:
2023-03-12 21:55
3 楼
  发表于:2025-03-30 21:39:27|查看用户信息

DX和GDI性能最大的差别在于使用GPU还是CPU来计算数据并输出绘制。

当你是用GDI时,如果所有数据都通过GPU来计算,可以极大提高GDI效率,但是,即使如此,仍然不如DX效率高。

如果想用相对底层的技术做2D游戏,推荐Directx2D。

当然,如果只是做游戏的话,选一个合适游戏引擎比纠结DX和GDI的效率要有意义的多。


共 1/1 页

0

帖子

0

回复

0

积分
最后登录:
1970-01-01 08:00
注册时间:
1970-01-01 08:00
会员必须登录才能发布帖子! 点击登录