SlimDX Device.Reset崩溃,出现“D3DERR_INVALIDCALL:无效呼叫(-2005530516)”错误
我们最近从VS 2005
升级到VS 2008
(Windows XP)。 我们在其中一个项目中使用SlimDx
。 升级后一切正常,除了我的恢复function,它会在devicelost / device reset上调用
D3DERR_INVALIDCALL:无效通话(-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
很好地配合使用?
我在这个论坛post中找到了一些有用的信息。 请注意该论坛上与VB相关的问题,但这仍然是一个很好的信息。 完全归功于Simon O’Connor 。
重新格式化并略微编辑。
INVALIDCALL通常意味着您传递给D3D的参数无效或您无法执行的操作。
找出D3D调用返回INVALIDCALL错误的原因的最简单方法是让它告诉您:
- 确保您正在使用安装了D3D运行时的DEBUG版本(安装SDK时您已获得选项)。
- 确保已启用运行时的DEBUG版本。 转到控制面板中的DirectX小程序,然后在Direct3D选项卡下查看。
- 在DirectX控制面板小程序中,将Direct3D的调试输出级别提高到最大值。 我已经使用Visual BASIC超过10年了,所以我忘记了可用的调试支持,我没有在这台机器上安装它来检查…如果VB有一个调试输出窗口:
- 运行程序并使其失败并显示INVALIDCALL错误。
- 现在查看调试输出窗口中的所有文本。 D3D将记录信息,警告以及重要的错误。 它还解释了为什么D3D呼叫失败的原因。
如果VB没有简单的调试输出窗口,请从http://www.sysinternals.com下载并运行DebugView,或使用DirectX SDK附带的命令行调试查看器
当您没有处理所有资源(顶点缓冲区,纹理……)时,通常会发生这种情况。
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) {} }
- App.xaml中的错误试图在Windows Phone 8项目中使用MVVM Light
- 调整图像gdi + graphics .net的大小
- Simple Injector:在同一个图的服务中注入相同的UnitOfWork实例
- 关闭子表单时如何刷新datagridview?
- 如何为二进制格式化程序创建SerializationBinder,以处理类型从一个程序集和名称空间到另一个程序集和名称空间的移动
- 列出CHM文件中的所有主题
- 如何设计在Windows Vista / 7上以管理员身份运行的自动启动应用程序?
- MethodInfo声明类型的等式
- 默认(CancellationToken)如何具有相应的CancellationTokenSource