【问题标题】:DirectX application doesn't render on laptopDirectX 应用程序无法在笔记本电脑上呈现
【发布时间】:2015-10-25 09:40:45
【问题描述】:

更新 1: 我已经尝试过相同教程的 c++ 源代码,并且在笔记本电脑上运行良好。

更新 2: 我硬着头皮决定改用 C++ 来处理这个项目。到目前为止,C# 版本中的所有内容在 C++ 版本中都可以正常工作。我无法解决或解决我的问题。

我正在使用 SharpDX 包装器开发一个小型 DirectX 项目。我正在使用 VS2015 社区版,我也在运行 Windows 10。我一直在关注(参见回复 cmets #1)的教程,特别是此处找到的教程的 C# 转换(参见回复 cmets #2)。我没有 10 个代表,所以我只能发布 2 个链接....

我已按照教程生成地形,如下所示。这是从我的台式电脑渲染的。

但是当我将项目复制到我的笔记本电脑时,应用程序不会渲染地形,我只剩下一个空白屏幕

我已尝试将驱动程序类型交换为笔记本电脑的参考,但它仍然无法呈现。有时应用程序会运行(但不渲染)而不会在笔记本电脑上崩溃,但有时它会在启动后或窗口关闭时崩溃(大多数是在窗口关闭时)。

错误是:pEngine.exe 中 0x770A5C0C (ntdll.dll) 处的未处理异常:0xC0000374:堆已损坏(参数 0x770D6478)

后跟:wntdll.pdb 未加载。

然后没有更多信息。我曾尝试重新安装 VS,但这并没有改变任何东西。我尝试在笔记本电脑上创建一个新项目并导入代码,但这也没有改变任何东西(表明不是代码问题?)。我还将这个项目交给了一位朋友,他在他们的桌面上对其进行了测试(它可以工作并渲染),然后他们在笔记本电脑上对其进行了测试,但没有出现同样的错误。

我已尝试运行 terrain 教程示例,但它们也无法在笔记本电脑上运行,这表明代码没有任何问题。我还测试了所有其他教程(非地形教程),它们在笔记本电脑上运行良好。

所以我想知道这是否是由于笔记本电脑造成的硬件问题?

在开始场景调用后的渲染循环中,我渲染地形并应用颜色着色器来显示网格效果

D3D.BeginScene( 0.0f, 0.0f, 0.0f, 1.0f );
......
terrain.Render( D3D.deviceContext );

if( !colorShader.Render( D3D.deviceContext, terrain.indexCount, worldMatrix, viewMatrix, projectionMatrix ) )
{
    return false;
}

如果我注释掉 colorshader.render 调用,应用程序将停止在笔记本电脑上崩溃。从那里看来,ColorShader.cs 类似乎存在问题,可以从 rastertek codeplex 链接查看。 (我现在不想再这样做了,但如果需要,我会很乐意发布我的代码)

我认为这是我没有解决的硬件/笔记本电脑问题或可能的着色器问题,但我是新手,所以我不太确定。 (调试帮助也没有告诉我任何信息)。

【问题讨论】:

  • 你的程序在内核中崩溃了,所以很可能你给 SharpDX 的原生 DirectX 实现提供了一些错误。也许它只是一个损坏的数组,或者您传递的某个大小比预期的要大(例如顶点或索引的数量)。 DirectX 程序可能会出现无数问题。当堆损坏触发未定义的行为时,不同的驱动程序和硬件平台的行为会有所不同。在台式机上,您最有可能使用 Nvidia 或 AMD 专用 GPU,在笔记本电脑上,它可能是 Intel 集成显卡。这就是您的结果在平台之间不一致的原因。
  • 那么您是说代码可能存在问题,但桌面驱动程序/硬件并不关心它并且仍然可以运行?我有点假设它可以在任何 Windows 设备上运行,但我真的应该考虑不同的硬件/驱动程序吗?
  • 大多数情况下,您只需编写不会触发未定义行为的代码,就可以保证在任何地方都能正常工作。当您选择目标功能级别或者您是专家并针对性能或质量进行优化时,您只关心底层硬件和驱动程序基础架构。
  • 我明白了。那么有没有办法可以调试它并找出究竟是什么原因造成的?我还尝试在我大学的一台台式机上运行它,它与笔记本电脑有相同的问题,假设它们也在运行集成显卡。

标签: c# directx sharpdx


【解决方案1】:

您的目标是 Directx11 吗?通过运行 dxdiag 确保您的笔记本电脑支持它。

【讨论】:

  • dxdiag 在功能级别下显示 11.0。它还说没有发现问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
相关资源
最近更新 更多