2

次のコードを使用して 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;
4

1 に答える 1

1

解決しました。くそー、私はすでにばかげていると感じています。

PresentParameters をこの 3 行だけに減らすと、Toughbook で機能するようになりました。

// Setup the device parameters
PresentParameters mPresentParams = new PresentParameters();
mPresentParams.Windowed = true;
mPresentParams.SwapEffect = SwapEffect.Discard;
于 2011-02-24T17:22:03.987 に答える