SlimDX Device.Reset使用“D3DERR_INVALIDCALL:无效调用(-2005530516)”崩溃“错误
我们最近从VS 2005
升级到VS 2008
(Windows XP)。我们在其中一个项目中使用SlimDx
。所有在升级后工作正常,除了我恢复功能,这被称为上与SlimDX Device.Reset使用“D3DERR_INVALIDCALL:无效调用(-2005530516)”崩溃“错误
D3DERR_INVALIDCALL崩溃devicelost /设备复位:无效的调用(-2005530516)
我用按Ctrl - Alt - Del然后Escape模拟设备丢失。
void Recover()
{
try
{
if (res.Code == D3DERR_DEVICENOTRESET)
{
res = m_device.Reset(m_presentParams); //Crashes on this.
if (res.IsSuccess)
{
m_deviceLost = false;
}
}
}
catch(Exception e)
{}
}
这事做VS 2008
,因为它曾经与VS 2005
很好地工作?
我在this forum post找到了一些有用的信息。注意与VB相关的论坛上的问题,但这仍然是一个很好的信息。完全抵免Simon O'Connor。
重新格式化并稍微编辑。
INVALIDCALL通常意味着您传递给D3D的参数无效或者您请求的操作不可行。
最简单的方法,找出为什么D3D调用返回的错误INVALIDCALL是让它告诉你:
- 确保您使用D3D运行时的调试版本安装(给您提供当您安装SDK时的选项)。
- 确保启用了运行时的DEBUG版本。转到控制面板中的DirectX小程序,然后在Direct3D选项卡下查找。
- 在DirectX控制面板小程序中,将Direct3D的调试输出级别提高到最大值。 我没有使用Visual BASIC超过10年,所以我忘记了什么调试支持可用,我没有安装在这台机器上检查...如果VB有一个调试输出窗口:
- 运行你的程序,并让INVALIDCALL错误失败。
- 现在查看调试输出窗口中的所有文本。 D3D会记录信息,警告和重要的错误。它也会解释为什么D3D调用失败的原因。
当你没如果VB没有一个简单的调试输出窗口,请下载并运行http://www.sysinternals.com DebugView中或使用自带的DirectX SDK
老兄,op很久以前解决了这个问题,请参阅评论(“某些资源(stateblocks)没有配置”) – SigTerm 2010-06-29 05:51:34
@SigTerm,yep ,在我的情况下,它与stateblocks无关,这是一个通用的错误消息,但是这个SO帖子在错误代码中的谷歌排名很高,所以我提出了这个答案,希望它可以帮助别人来通过搜索进入。 – 2010-06-29 06:41:59
命令行调试观众这通常发生” t处理你所有的资源(顶点缓冲区,纹理,...)
void Recover()
{
try {
if (res.Code == D3DERR_DEVICENOTRESET)
{
res = m_device.Reset(m_presentParams); //Crashes on this.
if (res.IsSuccess)
{
m_deviceLost = false;
}
}
} catch(Exception e) {}
}
任何在调试中可以帮助你? – Goz 2010-03-23 09:28:10
快速搜索“D3DERR_INVALIDCALL重置”会导致MSDN。 “方法调用无效,例如,方法的参数可能具有无效值。“ 所以我的建议是检查m_presentParams;它是否包含你期望的信息? – 2010-03-23 23:40:55
解决了:一些资源(stateblocks)没有被处置 – ababeel 2010-03-24 03:38:31