C #: невозможно создать устройство DirectX.Не работает ни Тип оборудования, ни Тип программного обеспечения - PullRequest
2 голосов
/ 24 февраля 2011

Я пытаюсь создать устройство 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).Я проверил, чтобы убедиться, что на компьютере-нарушителе включено аппаратное ускорение через dxdiag, и он все еще не сдвинулся с места.

К сожалению, единственное сообщение об ошибке, которое я получаю, это «Ошибка в приложении».Я даже вставил несколько окон сообщений между приведенным выше кодом, и кажется, что он никогда не попадает в блок catch ex1 и ex2.

Есть идеи, как это исправить?

Редактировать: Извините,Я только что понял, что забыл показать свои 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 Ответ

1 голос
/ 24 февраля 2011

Решил это. Черт, я уже чувствую себя глупо.

Сокращение PresentParameters только до этих трех строк заставило его работать на Toughbook.

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