アンチエイリアシング (anti-aliasing) / マルチサンプリング

プレゼンテーション パラメータのMultiSampleプロパティを設定することで、アンチエイリアシングを行わせられます。

MultiSampleType 列挙型
列挙子 マルチサンプリングの品質レベル
None 無効
NonMaskable PresentParameters.MultiSampleQualityの値
TwoSamples 2
ThreeSamples 3
FourSamples 4
FiveSamples 5
SixSamples 6
SevenSamples 7
EightSamples 8
NineSamples 9
TenSamples 10
ElevenSamples 11
TwelveSamples 12
ThirteenSamples 13
FourteenSamples 14
FifteenSamples 15
SixteenSamples 16
MultiSampleType Enumeration (Microsoft.DirectX.Direct3D) | MSDN
MultiSampleTypeの設定と表示イメージ
MultiSampleType None FourSamples NonMaskable NonMaskable
MultiSampleQuality --- --- 0 1
表示イメージ

マルチサンプリングの有効化

マルチサンプリングを有効にするには、スワップ エフェクトでSwapEffect.Discardが指定されている必要があります。

マルチサンプリングの可否

マルチサンプリングがデバイスでサポートされているかどうかは、Manager.CheckDeviceMultiSampleTypeメソッドにより確認できます。

public static bool CheckDeviceMultiSampleType(
    int adapter,                    // ディスプレイ アダプタ (グラフィックス・カード)
    DeviceType deviceType,          // デバイス タイプ
    Format surfaceFormat,           // マルチサンプリングするサーフェスのフォーマット
    bool windowed,                  // ウィンドウ モードならばtrue、フルスクリーンならばfalse
    MultiSampleType multiSampleType // マルチサンプリングの品質レベル
    );

サンプルコード

マルチサンプリングのすべての品質のサポートを確認し、 ハードウェアがサポートする最上位の品質に設定します。

PresentParameters parameters = new PresentParameters();
AdapterInformation adapterInformation = Manager.Adapters.Default;

// MultiSampleTypeの一覧を取得する
MultiSampleType[] multiSampleTypes = ( MultiSampleType[] )Enum.GetValues( typeof( MultiSampleType ) );

// 上位の品質レベルが最初になるように並べ替える
Array.Reverse( multiSampleTypes );

foreach( MultiSampleType sampleType in multiSampleTypes )
{
    int adapter           = adapterInformation.Adapter; // ディスプレイ アダプタ
    DeviceType deviceType = DeviceType.Hardware;         // デバイス タイプ
    bool windowed         = parameters.Windowed;         // ウィンドウ/フルスクリーン モード

    // バックバッファとZバッファで 所望のマルチサンプリングがサポートされているか確認する
    if( Manager.CheckDeviceMultiSampleType( adapter, deviceType, parameters.BackBufferFormat, windowed, sampleType )
     && Manager.CheckDeviceMultiSampleType( adapter, deviceType, ( Format )parameters.AutoDepthStencilFormat, windowed, sampleType ) )
    {
        parameters.MultiSample = sampleType;
        break;
    }
}