DirectDraw为什么用Blt往主表面画的时候,一进行比较大的拉伸就会变的特慢,而且特别耗费CPU!!谁能告诉我!多谢了!!

Robert2001 2001-12-27 09:16:25
...全文
336 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
pigzoo 2002-01-23
  • 打赏
  • 举报
回复
说了半天,如何用DirectX快速全屏显示一系列320*240大小位图(达到25fps)?请高手出招!!!
Robert2001 2001-12-29
  • 打赏
  • 举报
回复
好了 给分了
prglib 2001-12-28
  • 打赏
  • 举报
回复
对了,上面的宏定义每行结束要写上续行符'\'
prglib 2001-12-28
  • 打赏
  • 举报
回复
你可以试一下我定义的这一组宏,用来检测速度!
#define STARTQUERYPERFORMANCE() LARGE_INTEGER qFrequency,qCounterStart,qCounterEnd; QueryPerformanceFrequency(&qFrequency); QueryPerformanceCounter(&qCounterStart)
#define ENDQUERYPERFORMANCE() QueryPerformanceCounter(&qCounterEnd)
#define PERFORMANCEMESSAGE() CString strPerformance; strPerformance.Format("Time elapses:%f second(s)",(qCounterEnd.QuadPart-qCounterStart.QuadPart)/double(qFrequency.QuadPart)); AfxMessageBox(strPerformance)

使用的时候把他们卡在OnDraw()函数的两端
OnDraw()
{
STARTQUERYPERFORMANCE();
.
.
.
.
.
ENDQUERYPERFORMANCE();
PERFORMANCEMESSAGE();
}
侧速对比一下就知道了。
理论上是DirectDraw比较快,但是你是窗口模式SetCooperateLevel不同,硬件加速没有体现出来,而且你知道,Win2000是NT构架,不会随便让你操作硬件,所以对显存管得比较严,不像Win98可以直接写显存。
我在informedicals公司做图像处理,也试过这两种方法,相信我,DrawDibDraw绝对比DirectDraw快,除非你在全屏模式下。而且DrawDibDraw非常简单,与mfc结合很紧密。
Robert2001 2001-12-28
  • 打赏
  • 举报
回复
to:prglib(多多)
呵呵 我正是来这里问这个问题,就看到你的帖子,我想知道,是DriectDraw快呢 还DrawDib快呢,这两种方式,我都已经用过了,但是我们现在是把DiretDraw放在首选的,可是我突然发现 在2000下他的速度还不如DrawDib快,所以我想问问 理论上是谁快,在不同的平台上 实际上谁快,有没有人做过这样的比较 多谢! 我给帖子 加分了!
prglib 2001-12-28
  • 打赏
  • 举报
回复
建议你使用video for windows的函数drawdibdraw,每秒可以刷新20次以上带拉伸的图像,
不过要引用头文件vfw.h 引入库vfw32.lib
使用之前要先取得drawdibdraw的句柄, 用完后要释放,其他用发与gdi函数没什么区别。
具体可以在msdn中查索引drawdibdraw.
Robert2001 2001-12-28
  • 打赏
  • 举报
回复
to:rocks_lee(石子儿)
大哥 我用的是2000 G400 P3 800 应该没有什么问题吧!
to: Kevin_qing(Kevin)
我用的是窗口模式,有什么好的办法吗? 我只要显示一个小的窗口,能用全屏模式吗?我有点糊涂了。
to:cinlan(初学者)
98我还没有敢测呢,不知道会怎么样!

starshx 2001-12-28
  • 打赏
  • 举报
回复
directdraw是mirsoft搞出来最接近硬件的东东!
在micrsoft的windows上想就近硬件,不容易。
API,封装API的类,怎么可以有优于directdraw的速度啊。
rockswang 2001-12-28
  • 打赏
  • 举报
回复
收到收到,有空有空^_^
如果快速缩放对你来说非常重要的话,推荐你看看这篇文章:
http://softnb.51.net/maker/zoom.htm
上面引用的那段最慢的代码正是我写的,惭愧啊……
starshx 2001-12-28
  • 打赏
  • 举报
回复
Robert2001(Robert2001)
你在写什么?
xtky_limi 2001-12-28
  • 打赏
  • 举报
回复
listen
starshx 2001-12-28
  • 打赏
  • 举报
回复
不给分不说!哈哈!
是两个人
我和00000000000(00000000000)都要!!
Robert2001 2001-12-28
  • 打赏
  • 举报
回复
to:&&starshx(数星星)
我晕了,我现在到是越来越 糊涂了,问题是我应该怎么能让他快点,如果说是硬件不支持拉伸,那为什么2000下DrawDib 会比DirectDraw要快(至少我 这台机子是这样的)。
to:00000000000(00000000000)
DDSCL_NORMAL 能和DDSCL_EXCLUSIVE¦DDSCL_FULLSCREEN 共用吗?? 我的书上写的 可是不能啊?
to:rocks_lee(石子儿) 
大哥受到我的信了?这个元旦有空?
rockswang 2001-12-28
  • 打赏
  • 举报
回复
to 00000000000(00000000000) :
能给解释下吗?我很有兴趣!这样可行的原理是什么呢?
starshx 2001-12-28
  • 打赏
  • 举报
回复
sorry!sorry!来晚了。
Robert2001的问题是,使用blt往primarysurface绘图时(从物理的角度是从图形结构中向主表面的指定位置移动图形数据(就是用rect结构拉))。
在不拉伸图形的情况下,也就是说源rect和目的rect中的矩形相同的话,只牵涉的数据的移动(汇编中的move),如果有拉伸,不管是纵向或是横向的变形,图形数据在从源表面到目的表面的移动之前,directX sdk中的blt函数中的图形拉伸模型要根据两个矩形的不同,将源表面中的所有像素进行相关的处理(如果目的比源的要小,则只要将一定量的像素扣除即可,如果目的比源要大的话,就比较的复杂,要根据相临的几个像素生成新像素补入图形中,越大,这样的计算量越大,就越慢。但如果显卡如果有图形拉伸的加速性能的话,这些图形的计算不会再通过总线发给cpu来计算。
就是这样!没有什么!上面几个哥们说的太离谱了。
00000000000 2001-12-28
  • 打赏
  • 举报
回复
杀猪了!杀猪了!
我用的是2000 G400 P3 800 应该没有什么问题吧?
解:我用的PIII/933 G450 WIN2000 256M比你快吧,和板载显卡一样慢,换了一块ELSA后快的杀人,不信你自己TEST!想象就明白了,一会我哥门来个综述。
Win2000是NT构架不会随便让你操作硬件,所以对显存管得比较严,不像Win98可以直接写显存?
屁话!不能直接操作硬件我用它搞屁。WIN98可直接写显存WIN2000就不能直接写吗?你在2000下用的什么版本的?不会向“剑侠情缘2”一样直接发数据给主表面吧!
全屏幕模式下独占可以翻图,NORMAL模式则只认可BLT或FASTBLT,但如果我用(下面!)
ddrval = lpDD->SetCooperativeLeve_(hwnd,DDSCL_NORMAL|DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN);

好了我哥门提意见了!我就说到这!
Robert2001 2001-12-28
  • 打赏
  • 举报
回复
to:prglib(多多)
在2000下 DrawDib 是比DirectDraw快 这个我试了,但是98呢 NT呢!这两个 好象不是很明显
Robert2001 2001-12-27
  • 打赏
  • 举报
回复
没有人了解吗???
Kevin_qing 2001-12-27
  • 打赏
  • 举报
回复
我也遇到过,在2000下面使用窗口模式的时候遇到拉伸的blt速度会有很大的下降。
全屏模式还好没有什么影响
rockswang 2001-12-27
  • 打赏
  • 举报
回复
有可能是你的显卡驱动没装好,很多显卡支持硬件拉伸的
加载更多回复(2)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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