游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3048|回复: 8

请问各位大哥~

[复制链接]

34

主题

297

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
QQ
发表于 2004-2-9 15:00:00 | 显示全部楼层 |阅读模式
为什么我在调用RestoreAll
{
        lpDD->RestoreAllSurfaces();
        :DReLoadBitmap(lpDDSBack,"bmp2.bmp");
        ::DDReLoadBitmap(lpDDSBack2,"bmp1.bmp");
}

的时候会报告
DDHEL: Failed to open DCI primary surface
Direct3D9: (ERROR) :Couldn't get surface pointer for destination
的错误呢?
谢谢了

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-2-10 10:09:00 | 显示全部楼层

Re:请问各位大哥~

DDHEL: Failed to open DCI primary surface
Direct3D9: (ERROR) :Couldn't get surface pointer for destination

根据返回的出错信息来判断,RestoreAllSurface()方法可能并没有成功,无法取得可用图面内存的指针,所以在载入图像时,DX捕获并返回了此错误。

而且,Surface丢失的话,只要恢复显存里的图面就可以了。我尝试过用RestoreAllSurface()方法,但好象从来都没能把所有的图面全部恢复。最好还是在程序重新获得焦点的时候判断一下,逐一恢复丢失的图面.

34

主题

297

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
QQ
 楼主| 发表于 2004-2-10 10:51:00 | 显示全部楼层

Re:请问各位大哥~

恩~谢谢:)

找到错误行了
是我blt主页面的那一句(在InitDDraw的时候)
删掉就不会提示d3d9的那个错误了
不过还是很奇怪……为什么呢?

另外问一下
在restore主页面时返回的是WRONGMODE
restore后台缓冲的时候返回的是IMPLICITLYCREATED
应该怎样解决

万分感谢……~

34

主题

297

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
QQ
 楼主| 发表于 2004-2-10 11:35:00 | 显示全部楼层

Re: 请问各位大哥~

在restore主页面和缓存失败后
就会一直报ddcopybitmap failed
(
应该是这里:
DDReLoadBitmap(lpDDSBack,"bmp2.bmp");
DDReLoadBitmap(lpDDSBack2,"bmp1.bmp");
)

顺便问一下
怎样判断丢失的是哪个页面呢?

谢谢了~:)

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-2-11 00:17:00 | 显示全部楼层

Re:请问各位大哥~

返回WRONGMODE的话,是因为你恢复主图面时的分辨率或是色深与创建主图面时的分辨率或色深不一致所造成的,返回IMPLICITLYCREATED可能也是基于同样的原因。

如果你的程序是全屏的话,就不应该在程序被切换到后台时恢复图面,如果是窗口程序,改变屏幕的分辨率的话,你必须释放已经创建的DD对象并重新创建一个DD对象。

如果一个图面丢失的话,对它的大多数操作都会返回DDERR_SURFACELOST,只要判断一下就可以了。

34

主题

297

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
QQ
 楼主| 发表于 2004-2-11 11:55:00 | 显示全部楼层

Re:请问各位大哥~

非常感谢~:)

34

主题

297

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
QQ
 楼主| 发表于 2004-2-11 15:33:00 | 显示全部楼层

Re: 请问各位大哥~

再问一下
离屏页面是绝对不会丢失的么?
3Q~ [em13]

今天终于把那个例子从头尾完全看懂了~
Bug排清~
幸福啊~ [em6]

写程序感觉最好的就是这时候了~

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-2-11 19:45:00 | 显示全部楼层

Re:请问各位大哥~

在内存里的离屏页面是不会丢失的,就像你从堆中new一个数组,也不会因为你的程序换到后台就丢失了,不是吗?

而在显存里的页面,只要是改变了分辨率或是色深,就会丢失,从而必须恢复它。也有可能你恢复了显存里的页面,而DX分配的是你上次丢失的页面内存,内容也没有改变,但这样的情况并不常见。

34

主题

297

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
QQ
 楼主| 发表于 2004-2-12 14:33:00 | 显示全部楼层

Re:请问各位大哥~

Thanks~:)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-25 06:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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