游戏开发论坛

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

d3d游戏.最小化后,然后最大话就停止运行了?

[复制链接]

4

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2007-8-14 13:43:00 | 显示全部楼层 |阅读模式
如题..为什么/??谢谢解答

15

主题

202

帖子

207

积分

中级会员

Rank: 3Rank: 3

积分
207
QQ
发表于 2007-8-14 14:11:00 | 显示全部楼层

Re:d3d游戏.最小化后,然后最大话就停止运行了?

设备丢失.

4

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2007-8-14 17:08:00 | 显示全部楼层

Re: d3d游戏.最小化后,然后最大话就停止运行了?

怎么把这个设备 找回来呢???请教了

6

主题

307

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2007-8-14 20:20:00 | 显示全部楼层

Re:d3d游戏.最小化后,然后最大话就停止运行了?

调用D3DDevice的Reset

不过之前先要把所有在显存里创建的对象都释放掉,包括顶点缓冲、纹理、Effect,Reset后再重建

4

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2007-8-15 09:10:00 | 显示全部楼层

Re:d3d游戏.最小化后,然后最大话就停止运行了?

我是挂钩,替换了别的游戏的IDirect3DDevice9,我也不知道里面创建了什么对象啊...
但是不挂钩,游戏是正常的,挂钩后,最小化,或者改变游戏窗口的大小,就会卡住,不是所有游戏都这样,只是个别游戏

2

主题

7

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2007-8-15 10:44:00 | 显示全部楼层

Re:d3d游戏.最小化后,然后最大话就停止运行了?

记得仙剑3就是这样的 打个补丁就好了

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2007-8-15 11:48:00 | 显示全部楼层

Re:d3d游戏.最小化后,然后最大话就停止运行了?

DX9.0以后全屏切换就会设备丢失,都是这样的
不是释放掉IDirect3DDevice9,而是释放那些采用了D3DPOOL_DEFAULT创建的顶点和模型
比如把释放掉的东西放在函数 PreReset()然后把重新创建这些顶点的代码放在函数 Recreate()
那么设备丢失处理可以是这样:
hr=g_pD3DDevice->TestCooperativeLevel();
while(hr==D3DERR_DEVICELOST)
{
        PreReset();
        if(hr!=D3DERR_DEVICENOTRESET)
        {
                Sleep(1000);
                hr=g_pD3DDevice->TestCooperativeLevel();
        }
        if(FAILED(g_pD3DDevice->Reset(&d3dpp)))//d3dpp是个D3DPRESENT_PARAMETERS结构,可以在创建时
                                                  //候把创建用的D3DPRESENT_PARAMETERS保存起来这时用
        {
                hr=D3DERR_DEVICELOST;
        }
        else
        {
                ReCreate();
                g_pD3DDevice->SetRenderState( D3DRS_LIGHTING,TRUE );//恢复光照,是DX10的话好像
                                                                         //不需要
        }
}

14

主题

345

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
QQ
发表于 2007-8-15 12:22:00 | 显示全部楼层

Re:d3d游戏.最小化后,然后最大话就停止运行了?

参考DXUT的OnLostDevice()和OnResetDevice()的处理

4

主题

8

帖子

8

积分

新手上路

Rank: 1

积分
8
 楼主| 发表于 2007-8-16 00:53:00 | 显示全部楼层

Re: d3d游戏.最小化后,然后最大话就停止运行了?

老大们,我是挂的别的游戏,IDirect3DDevice9这个com给替换掉了...
D3DPRESENT_PARAMETERS这个结构也不可能是我创建的...
我就挂了钩子,替换了游戏里的这个类,其它什么都没改,这个类也是直接调用的真正的IDirect3DDevice9,什么也没做,不挂钩就很正常....
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 10:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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