不解!

rotation 2003-09-11 11:36:53
創建主表面,
DDSURFACEDESC ddsd;
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
ddrval = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );
if( ddrval != DD_OK )return DDError(ddrval);

創建後備緩衝:
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT |DDSD_WIDTH;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY;
//改為 DDSCAPS_VIDEOMMEORY fps會降低很多,不解之處

ddsd.dwWidth = 640;
ddsd.dwHeight = 480;
ddrval = lpDD->CreateSurface(&ddsd, &lpDDSBack, NULL);
if (ddrval!=DD_OK)
return DDError(ddrval);

渲染:
lpDDSPrimary->BltFast(0,0,lpDDSBack, NULL, NULL);

為什麼我在創建後備緩衝時,在顯存中創建和在內存中創建fps變化很大,我覺得在顯存中應該更快,可為什麼實際上反而更慢!
請高手指教!
多謝1
...全文
59 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
rotation 2003-09-24
  • 打赏
  • 举报
回复
那就是說我們最好不要用硬件Flip了,那DirectX設計這個功能啟不是浪費!~?
rotation 2003-09-24
  • 打赏
  • 举报
回复
那就是說我們最好不要用硬件Flip了,那DirectX設計這個功能啟不是浪費!~?
rotation 2003-09-23
  • 打赏
  • 举报
回复
如果創建全屏Flip表面鏈時,後備緩衝是創建在顯存中還是創建在內存中的?
Gdj 2003-09-23
  • 打赏
  • 举报
回复
能硬件Flip的面在显存中。
Gdj 2003-09-22
  • 打赏
  • 举报
回复
AGP的问题吧?换个PCI显卡试试?既然用了AGP显卡就不该用CPU去读写显存的。写游戏时后备缓冲无论如何都应该放在内存里。为什么?切换程序会造成显存surface丢失。如果你不想切出桌面再切回来时需要设计个reload画面的话最好听我的……^^
Leon8086 2003-09-12
  • 打赏
  • 举报
回复
记得以前看过这方面的资料,说从系统内存blt到显存,和显存到内存的操作都是比较慢的,类似的还有lock一个显存表面,这类操作应该尽量避免。
rotation 2003-09-12
  • 打赏
  • 举报
回复
樓上的說的太對了,我剛剛發現這個問題,取顯存數據要比取內存慢很多很多,但是存數據幾乎
沒有影響,原來影響FPS的原因在這,以前真是不知道阿,
狂Faint!
crazyyao 2003-09-12
  • 打赏
  • 举报
回复
准确地说存还可以
只比内存慢一点
但是取会慢的不得了
rotation 2003-09-12
  • 打赏
  • 举报
回复
我知道是什麼原因了,
在顯存中創建後備緩衝,執行Blt時要快,因為Blt操作是由顯卡完成的,但是黨對顯存中的數據進行逐像素操作時,明顯要比在內存中慢,可能是因為直接存取內存要比直接存取顯存快;

我的渲染當時正在對後備緩衝進行逐像素存取操作,所以黨我改為Systemmemory時,要比Videomemory快,但是此時做Blt操作要慢;
相反,改為Videomemory時,Blt要快,但是逐像素存取要慢.

我反覆測試才發現的,我覺得是這樣,有沒有更合理的解釋!
ttmmdd 2003-09-12
  • 打赏
  • 举报
回复
还在用Direct Draw 吗?
DX 8.0以后就支持的不好了,
是用Direct3D函数吧.
Direct Draw已经和Direct3D合并了.

crazyyao 2003-09-12
  • 打赏
  • 举报
回复
我没具体试过这种情况
我记得BltFast如果不设DDBLTFAST_WAIT应该是立刻返回的
位块传送的工作由显卡完成
可能显卡的速度本来就比cpu慢
但是因为这样不会占用cpu资源,所以还是划的来的
搂主把整个渲染循环贴出来看看

我也是刚学的,不知说的对不对
还请高手多多指教
rotation 2003-09-12
  • 打赏
  • 举报
回复
又發現,取顯存要比取內存慢將近10倍,
rotation 2003-09-12
  • 打赏
  • 举报
回复
我只想知道為什麼?

如果說內存到顯存的Blt也慢,那什麼方法能更快呢,請賜教!
rotation 2003-09-11
  • 打赏
  • 举报
回复
沒人理阿

代碼不是很難懂吧!
我相信接觸過DX的人一定見過這幾句代碼!

我說的這種情況,不知道個位遇到過沒!
rotation 2003-09-11
  • 打赏
  • 举报
回复
沒人理阿

代碼不是很難懂吧!
我相信接觸過DX的人一定見過這幾句代碼!

我說的這種情況,不知道個位遇到過沒!

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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