游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6188|回复: 11

同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只有100

[复制链接]

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
发表于 2012-2-27 12:05:00 | 显示全部楼层 |阅读模式
整个窗口是1024×768的,而且只画了FPS这一文本,GDI有900多帧(我用D3D的ID3DXFont测试也是900多帧),而ddraw则勉强能到100帧,


为什么会有如此大的反差 [em24]


PS:代码都是相同的
PS:没有用Sleep()


PS:经测试发现,速度都被下面这个语句拖慢了:
g_DDrawInfo.m_pDDPrimarySurface->Blt(&dstRect, g_DDrawInfo.m_pDDBackSurface, &srcRect, DDBLTFAST_NOCOLORKEY|DDBLT_WAIT, NULL);
该语句是在渲染的最后一步调用的..

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20515
发表于 2012-2-27 14:16:00 | 显示全部楼层

Re:同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只有1

可能是垂直同步的限制。

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-2-27 15:18:00 | 显示全部楼层

Re: Re:同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只

sea_bug: Re:同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只有100帧??

可能是垂直同步的限制。



那么ddraw怎么开启和关闭垂直同步 [em24]

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20515
发表于 2012-2-27 16:14:00 | 显示全部楼层

Re:同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只有1

DDBLT_WAIT? 看看它相关的定义有没有。

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-2-27 18:37:00 | 显示全部楼层

Re: Re:同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只

sea_bug: Re:同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只有100帧??

DDBLT_WAIT? 看看它相关的定义有没有。



应该和DDBLT_WAIT没什么关系,我看大家都是用的这个东西(Windows游戏编程大师技巧),风魂++里也是这么用的。
我在DX7.0 SDK的一个Font示例里,加了一段绘制FPS的代码,发现帧率也仅80多左右,
我想,可能,ddraw的速度也只有这么点了,要想真正解决这个blt瓶颈,可能得借助脏矩形了。

3

主题

70

帖子

70

积分

注册会员

Rank: 2

积分
70
发表于 2012-2-27 20:07:00 | 显示全部楼层

Re:同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只有1

用ID3DXSprite随便写了一个,2200多帧。。。

77

主题

485

帖子

486

积分

中级会员

Rank: 3Rank: 3

积分
486
发表于 2012-3-1 12:46:00 | 显示全部楼层

Re:同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只有1

绘制字符本身很慢啊.
用图片,或者True Type字体代替.

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-3-2 11:24:00 | 显示全部楼层

Re: Re:同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只

happyking: Re:同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只有100帧??

绘制字符本身很慢啊.
用图片,或者True Type字体代替.



no
经验证,用surface绘制FPS和用文本绘制的FPS一样。

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2012-3-4 22:38:00 | 显示全部楼层

Re:同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只有1

是否是经典的回读显存问题呢? 当年AGP时代这个可是慢得一塌糊涂.

50

主题

236

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
 楼主| 发表于 2012-3-5 17:37:00 | 显示全部楼层

Re: Re:同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只

hmhm: Re:同样是绘制1个FPS文本,为何GDI能达到900帧,而ddraw却只有100帧??

是否是经典的回读显存问题呢? 当年AGP时代这个可是慢得一塌糊涂.


这个贴子给出了源代码(极其精简的)
http://topic.csdn.net/u/20120229/09/b3193c74-f67b-480d-bc78-1269e36210da.html


(gameres的代码粘贴效果太差了,一行显示不下就不显示了,滚动条也没有)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 14:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表