Direct2D デバッグ レイヤーの概要
Direct2D デバッグ レイヤーには、ランタイム アプリケーションのエラーを最小限に抑えるためのデザイン時のデバッグ メッセージが用意されています。 この概要では、Direct2D デバッグ レイヤーの基本について説明します。 基本的な Direct2D アプリケーションの作成に精通していることを前提としています。
この概要には、次のセクションが含まれています。
Direct2D デバッグ レイヤーとは
Direct2D デバッグ レイヤーは、d2d1debug.dll という名前の独自の DLL で Direct2D とは別に実装され、Direct2D 関数を正確に使用できるようにするためのデバッグ メッセージを提供します。 デバッグ メッセージは、多くの場合、無効なパラメーター (Direct3D 関連の可能性があります)、無効なリソース、スレッド違反、クリップで十分な場合にレイヤーを使用するなどのパフォーマンスの問題などの API コントラクト違反によって発生します。 デバッグ レイヤーによってトレースされる情報の量を指定するには、情報、警告、エラーの 3 つのデバッグ レベルのいずれかを指定できます。レベル エラーのメッセージは、デバッグに役立つブレークポイントをトリガーします。
Direct2D デバッグ レイヤーのインストール
デバッグ レイヤーのインストール手順については、「 Direct2D デバッグ レイヤーのインストール」を参照してください。
デバッグ 層の有効化
アプリケーションでデバッグ レイヤーを有効にするには、D2D1CreateFactory 関数を使用してファクトリを作成するときに、D2D1_DEBUG_LEVEL_NONE以外のD2D1_DEBUG_LEVEL値を指定します。
注意
Direct2D デバッグ レイヤーが有効になっている場合、色コンテキストを設定するときに Direct2D カラー管理効果 (CLSID_D2D1ColorManagement) によってアクセス違反が発生する可能性があります。 回避策は、カラー管理効果を使用するときにデバッグ レイヤーを無効にすることです
ファクトリのデバッグ レイヤーを有効にすると、そのファクトリによって作成されたオブジェクトのデバッグ情報も有効になります。
次の例では、DEBUG ビルド構成用にアプリケーションをコンパイルするときに、ファクトリのデバッグ レイヤーを有効にします。
// If you set the options.debugLevel to D2D1_DEBUG_LEVEL_NONE,
// the debug layer is not enabled.
#if defined(DEBUG) || defined(_DEBUG)
D2D1_FACTORY_OPTIONS options;
options.debugLevel = D2D1_DEBUG_LEVEL_INFORMATION;
hr = D2D1CreateFactory(
D2D1_FACTORY_TYPE_SINGLE_THREADED,
options,
&m_pD2DFactory
);
#else
hr = D2D1CreateFactory(
D2D1_FACTORY_TYPE_SINGLE_THREADED,
&m_pD2DFactory
);
#endif
注意
ファクトリ オプションが指定されていない場合、またはデバッグ レベル "none" が指定されている場合、デバッグ レイヤーは呼び出されません。 アプリケーションのリリース バージョンでは、デバッグ レイヤーをアクティブにしないでください。
次のセクションでは、 D2D1_DEBUG_LEVEL 列挙で定義されているさまざまなデバッグ レベルについて説明します。
デバッグ レベル
D2D1_DEBUG_LEVEL列挙では、D2D1_DEBUG_LEVEL_ERROR (エラー)、D2D1_DEBUG_LEVEL_WARNING (警告)、D2D1_DEBUG_LEVEL_INFORMATION (情報) の 3 つのデバッグ レベルを指定します。 これらのレベルは次のように解釈されます。
エラー: Direct2D は、重大なエラー メッセージをデバッグ レイヤーに送信します。 たとえば、スレッド制約を解除すると重大なエラーが発生します。
警告: Direct2D は、エラー メッセージと警告をデバッグ 層に送信して、これらのメッセージに対処できるようにします。
情報: Direct2D は、エラー メッセージ、警告、および追加の診断情報をデバッグ 層に送信します。 たとえば、パフォーマンス向上メッセージは、このデバッグ レベルで送信されます。
D2D1_DEBUG_LEVEL_NONE値 (なし) は、Direct2D でデバッグ出力が提供されないことを示します。
関連トピック