游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4764|回复: 2

设备丢失后,使用reset返回的是D3DERR_INVALIDCALL

[复制链接]

1

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2008-10-22 11:06:00 | 显示全部楼层 |阅读模式
        if(m_pGameEngine_SceneManager->GetDevice()->TestCooperativeLevel()==D3DERR_DEVICELOST)//切换时设备丢失
          {
                devicelost=true;
                return true;
        }
        if((m_pGameEngine_SceneManager->GetDevice()->TestCooperativeLevel()==D3DERR_DEVICENOTRESET)&&devicelost)//切换回来时可以恢复了
    {
                d3dpp=m_pGameEngine_SceneManager->Get_D3DPRESENT_PARAMETERS();
                if((m_pGameEngine_SceneManager->GetDevice()->Reset(&d3dpp))==D3DERR_INVALIDCALL)//为什么返回的是D3DERR_INVALIDCALL,而不是成功
                {
                        devicelost=true;
                }
                else
                {
    RestoreDevice();//恢复设备
                        devicelost=false;
                }
        }
        m_pGameEngine_SceneManager->EndRender();

文档里说出现D3DERR_INVALIDCALL可能是参数传递错误,实际上我是用CreateDevice()时使用的参数:
d3dpp=m_pGameEngine_SceneManager->Get_D3DPRESENT_PARAMETERS();
问题出在哪?

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2008-10-22 14:44:00 | 显示全部楼层

Re:设备丢失后,使用reset返回的是D3DERR_INVALIDCALL

设备重置的话需要把那些Default_pool的东西全部释放掉,如果没有释放是没法重置的

14

主题

345

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
QQ
发表于 2008-10-23 18:52:00 | 显示全部楼层

Re:设备丢失后,使用reset返回的是D3DERR_INVALIDCALL

打DX控制面板, 选则DEBUG模式
这样在程序Reset时,VS的输出窗口会有你没有释放的资源信息, 记下AllocID
把AllocID填入DX控制面板的"Break On AllocID"里, 重新运行程序
这时程序会在创建该资源时中断, 看一下调用堆栈就能找到是哪个资源没有释放了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-15 00:02

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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