1

WPFがDirectXをカプセル化することは知っていますが、それを使用してDirectXまたはUser32をレンダリングできることを学びました。

  1. コントロールをウィンドウにドラッグしたとき、DirectXはデフォルトのレンダラーですか?

  2. そうでない場合、User32を使用して強制的にレンダリングするにはどうすればよいですか?

  3. もしそうなら、User32を使用してウィンドウ全体をレンダリングする必要がありますか、それとも自分のコントロールだけをレンダリングする必要がありますか?

4

2 に答える 2

6

WPFの前の生活:

振り返ってみると、標準のウィンドウアプリケーションがWindows OSの2つの使い古された部分に応答して、ユーザーインターフェイスを作成していることを確認しないでください。

a)User32:要素に使い慣れたウィンドウのルックアンドフィールを提供します。

b)GDI / GDI +:形状、テキスト、画像などをレンダリングするための描画サポートを提供します。

WPFはDirectXまたはUser32を使用してレンダリングしますか?

WPFはこれをすべて変更し、ウィンドウフォームとは根本的に異なります。WPFの基盤となるテクノロジはGDI/GDI +ではなく、DirectXを使用します。したがって、WPFは、作成するユーザーインターフェイスの種類に関係なくDirectXを使用します。つまり、複雑な3Dグラフィックを作成する場合でも、ボタンを描画する場合でも、すべての描画作業はDirectXパイプラインを通過する必要があります。WPFはDirectXに依存しているため、ハードウェアアクセラレーションも利用できるようになりました。つまり、ビデオカードの専用プロセッサであるGPU(グラフィックスプロセッシングユニット)とCPU(中央処理装置)に可能な限り多くの作業を渡すことができます。 )少し休むことができます。

WPFはUser32に依存していますか?

WPFは、入力の処理とルーティング、画面領域のどの部分を所有しているアプリケーションの分類など、特定のサービスを引き続きUser32に依存しています。ただし、すべての描画はDirectXを介して行われます。

これは、WPFの最も重要な変更です。WPFはGDI/GDI+のラッパーではありません。代わりに、これは代替品であり、DirectXを介して機能する別個のレイヤーです。

WPFはDirectXなしで実行できますか?

WPFはDirectXランタイムに依存しています。ただし、DirectXとWPFの両方に独自のソフトウェアフォールバックモードがあるため、適切なグラフィックハードウェアやドライバーがない場合は、代わりにソフトウェアレンダリングが使用されます。一部のグラフィックを多用する機能は、ソフトウェアレンダリング時にも使用できなくなります。WPFを使用すると、 実行中のレンダリング層を確認し、現在の環境に合わせてUIを調整できます。

また、HALとHELをざっと読んで、DirectXハードウェアまたはソフトウェアを介して何ができるかをさまざまなグラフィックカードが決定することを理解することをお勧めします。

図1.DirectXのアーキテクチャとWin32との関係。

ここに画像の説明を入力してください

図1では、DirectXの下にHEL(ハードウェアエミュレーションレイヤー)とHAL(ハードウェアアブストラクションレイヤー)と呼ばれる2つのレイヤーがあることに気付くかもしれません。DirectXは非常に前向きな設計であるため、高度な機能がハードウェアによって実装されていることを前提としています。ただし、ハードウェアが一部の機能をサポートしていない場合はどうなりますか?これが、デュアルモードのHALおよびHEL設計の基礎です。

HAL、またはハードウェアアブストラクションレイヤーは、「金属への」レイヤーです。ハードウェアと直接通信します。このレイヤーは通常、ベンダーのデバイスドライバーであり、一般的なDirectX呼び出しを介して直接通信します。つまり、HALは、要求している機能がハードウェアによって直接サポートされているために高速化されている場合に使用されます。たとえば、ビットマップの描画を要求すると、ソフトウェアループではなく、ハードウェアブリッターが機能します。

HEL(ハードウェアエミュレーションレイヤー)は、ハードウェアが要求している機能をサポートしていない場合に使用されます。ビデオカードにビットマップを回転するように依頼するとします。ハードウェアがローテーションをサポートしていない場合、HELが起動し、ソフトウェアアルゴリズムが引き継ぎます。明らかに、これは遅いですが、ポイントはそれがあなたのプログラムを壊さないということです。それでも機能します—ただ遅くなります。さらに、HALとHELの切り替えは透過的です。DirectXに何かを実行するように要求し、HALがそれを直接実行する場合、ハードウェアがそれを実行します。それ以外の場合は、ソフトウェアエミュレーションが呼び出され、HELでジョブが実行されます。

参照:

http://vishalnayan.wordpress.com/2011/05/20/windows-presentation-foundation-what-why-and-when/ http://www.yaldex.com/games-programming/0672323699_ch05lev1sec1.html

于 2013-03-19T02:34:55.833 に答える
2

をに設定すると、にApplicationソフトウェアレンダリングを強制的に使用できます。ProcessRenderModeSoftwareOnly

RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;

ただし、これはプロセスレベルで行われるため、要素ごとに実行できるかどうかはわかりません。

于 2013-03-19T02:29:10.293 に答える