分享
 
 
 

DirectX8.1的DirectDraw7研究手记(三)

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

一、在何种情况下应该选择IDirectDrawSurface::Blt方法,在何种情况下应该选择IDirectDrawSurface::BltFast方法。(这段解释是从别人那里copy过来的,但不知正确与否,但我觉得讲的有理)

1. 如果你正在从一个隐屏缓冲区中进行一次按位隔行拷贝,你应当使用IDirectDrawSurface::BltFast。

2. 如果你的系统显存中是使用硬件进行按位隔行拷贝,你虽然不会真正提高拷贝的速度,但是,它会节省系统模拟硬件时间,从而使整个按位隔行拷贝时间缩短约10%。因此,我推荐读者使用IDirectDrawSurface::BltFast进行所有的显示操作(从显存按位隔行拷贝到显存中)。

3. 如果你正在从系统内存中按位隔行拷贝,或者要求专门的硬件标志位,这样的话,你就必须使用IDirectDrawSurface::Blt。

二、AddRef()函数是干什么的?

IDirectDrawSurface7::AddRef()

DirectX8 SDK HELP 中相关的原文是这样的

Increases the reference count of the object by 1.

When the object is created, its reference count is set to 1. Every time an application obtains an interface to the object or calls the AddRef method, the object's reference count is increased by 1. Use the Release method to decrease the object's reference count by 1.

大意是说:AddRef()函数用来给object中表示object有多少个“关联”的总数值加1。而当Release被调用时,这个值减1。

而我观察DirectX所附带的例子里有用AddRef()函数的地方,有两种:

1. 在g_lpFrontSurface->GetAttachedSurface(&ddscaps,&g_lpBackSurface)之后,即“前台缓存页面GetAttachedSurface后台缓存页面”之后,用过g_lpBackSurface->AddRef();。

2. 另一种情况是:假设有两个DirectDraw实体,我们申请了两个指针,LPDIRECTDRAW7 lpDD1,lpDD2;,而一个页面是由lpDD2->CreateSurface创建的,传递到lpDD1中做它的一个页面后,用了一次AddRef();

所以大概那段英文是说这个函数应该用在取得一个不是由自身DirectDraw指针的CreateSurface创建的Surface后,用IDirectDraw7::AddRef。大致我只能这样理解了,如果那位兄台有高见,希望还请好不保留的赐教。

三、Alt+Tab一次后,页面丢失的问题。

我们用一个函数IDirectDrawSurface7::Restore();这个函数只能恢复页面原来所站有的内存位置大小,但不能恢复原来的内容,所以还要我们手工把内容重新装入。在DirectDraw程序中只要页面丢失,所有的DirectDraw函数都会不作任何事情,只返回DDERR_SURFACELOST表示页面丢失。同时IDirectDrawSurface7::IsLost()也有函数来判断页面是否丢失。如果调用成功,返回值是DD_OK,表明页面内存没有被释放。如果调用失败,返回值可能是下列值之一:DDERR_INVALIDOBJECT ;DDERR_INVALIDPARAMS ;DDERR_SURFACELOST

原来是有多少Surface就要逐个调用,现在IDirectDraw7::RestoreAllSurface()解决了这个问题,只要调用一次DirectDraw的实体指针的RestoreAllSurface()一次就可以恢复所有相关页面的内存大小和位置。内容还是要重新调入的。(我想那个AddRef()函数可能就和这RestoreAllSurface()有一些关联吧!)

三、不需要调色板的时候??

在displaymode设置为640×480×8位(256色)时要用调色板管理页面色彩,否则,像上一讲中的例子有时就会产生失真。而640×480×16位色时就算不CreatePalette也不会产生颜色失真。

在“老王”的directx手册中有这样一句话:“那些使用16位或更高位像素格式的页面并不使用调色板。”

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有