C#:无法创建DirectX设备。硬件类型或软件类型都不起作用

时间:2011-02-24 00:45:22

标签: c# directx device managed-directx

我正在尝试通过以下代码创建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);

问题在于,这仅适用于某些计算机(例如我的工作计算机),而不适用于其他计算机(具体而言,适用于Panasonic 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;

1 个答案:

答案 0 :(得分:1)

解决了它。 Darn,我觉得自己很蠢。

将PresentParameters简化为这3行,使其适用于Toughbook。

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