【问题标题】:C#: Unable to create DirectX device. Neither Hardware type or Software type worksC#:无法创建 DirectX 设备。硬件类型或软件类型都不起作用
【发布时间】:2011-02-24 00:45:21
【问题描述】:

我正在尝试通过以下代码创建 DirectX 设备:

Caps deviceCapability;
int deviceAdapter = Manager.Adapters.Default.Adapter;

try
{
    deviceCapability = Manager.GetDeviceCaps(
        deviceAdapter, DeviceType.Hardware);
}
catch (Exception ex1)
{
    try
    {
        deviceCapability = Manager.GetDeviceCaps(
            deviceAdapter, DeviceType.Software);
    }
    catch (Exception ex2)
    {
        deviceCapability = Manager.GetDeviceCaps(
            deviceAdapter, DeviceType.Reference);
    }
}

CreateFlags deviceFlags = CreateFlags.SoftwareVertexProcessing;
if(deviceCapability.DeviceCaps.SupportsHardwareTransformAndLight == true)
{
    deviceFlags = CreateFlags.HardwareVertexProcessing;
}

mDevice = new Device(deviceAdapter, deviceCapability.DeviceType,
    mInvisiblePanel, deviceFlags, mPresentParams);

问题在于,这仅适用于某些计算机(例如我的工作计算机),而不适用于其他计算机(具体而言,松下 CF-19 Toughbook)。我已经检查以确保有问题的 PC 通过 dxdiag 启用了硬件加速,但它仍然没有让步。

不幸的是,我收到的唯一错误消息是“应用程序错误”。我什至在上面的代码之间插入了几个消息框,它似乎从来没有碰到 ex1 和 ex2 的 catch 块。

关于如何解决这个问题的任何想法?

编辑:抱歉,我刚刚意识到我忘了显示我的 PresentParameters。

// Setup the device parameters
PresentParameters mPresentParams = new PresentParameters();
mPresentParams.Windowed = true;
mPresentParams.SwapEffect = SwapEffect.Discard;
mPresentParams.AutoDepthStencilFormat = DepthFormat.D16;
mPresentParams.EnableAutoDepthStencil = true;
///* TODO: Anti-aliasing is not working
mPresentParams.MultiSample = MultiSampleType.NonMaskable;
mPresentParams.MultiSampleQuality = 0;

【问题讨论】:

  • 托管 DirectX 已弃用 4 年了?这东西没气了。 2007 年 8 月的 SDK 版本是最后一个仍然支持它的版本,我想你需要在机器上匹配版本的 DirectX。版本 9,我想。使用 XNA 前进。
  • 是的,我的 Toughbook 和我的机器上有相同的 DirectX。至少,根据 dxdiag。
  • 如果 XNA 不是你的东西,SlimDX 是 DirectX9-11 C++ 命令到 C# 的包装器。有一些基本教程,但在此之后,您需要自己动手或提出问题

标签: c# directx device managed-directx


【解决方案1】:

解决了。该死,我已经觉得自己很愚蠢。

将 PresentParameters 减少到仅这 3 行使其在 Toughbook 上工作。

// Setup the device parameters
PresentParameters mPresentParams = new PresentParameters();
mPresentParams.Windowed = true;
mPresentParams.SwapEffect = SwapEffect.Discard;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多