2012-03-11 21 views
1

WS_EX_LAYEREDスタイルウィンドウを使用して境界線のないウィンドウを作成しようとしています。目的はDirectXをデスクトップに直接使用してグラフィックスをレンダリングし、アルファを使用して現在のデスクトップウィンドウにブレンドすることです。スキンされたウィンドウ:Win32 APIとDirectX

私のシステムでは、このテクニックは完全に機能するようです。さまざまなアルファレベルを設定し、さまざまなレベルの透明性を達成できます。残念ながら、いくつかのユーザーが重大なパフォーマンスの問題と低フレームレートを報告しているため、この技術は使用できません。

次のようにコードの設定は次のとおりです。

  1. レイヤード(WS_EX_LAYERED拡張スタイル)ウィンドウを作成します。
  2. HWNDウィンドウを使用してDirectXを初期化します。
  3. CreateRenderTarget DirectXメソッドを使用してレンダーターゲットを作成します。レンダリングループ中に次に

  1. DirectXの呼び出しを使用してレンダーターゲットにグラフィックスをレンダリングします。
  2. GetDCメソッドを使用して、DirectXレンダーターゲットサーフェスにHDCハンドルを取得します。
  3. UpdateLayeredWindow関数を使用してウィンドウの内容を更新し、DirectXサーフェイスHDCを指定します。

私の質問は間違っていますか?ウィンドウの更新のパフォーマンスを向上させる方法はありますか?私はレンダリングターゲットをロックし、DIBセクションにビットを手動でコピーしてウィンドウ領域に表示するなど、さまざまなことを試みました。

答えて

0

あなたのウィンドウはどのくらいですか?メモhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms633556%28v=vs.85%29.aspxのMSDNのドキュメントには、「レイヤードウィンドウとその下にあるウィンドウによる描画のパフォーマンスを最適化するため、レイヤードウィンドウはできるだけ小さくする必要があります。

合成(Aero)が有効になっていると、パフォーマンスが向上することがあります。 Windowsが既に合成中の場合は、レイヤードウィンドウを描画するために余分な作業を行う必要はありません。

合成によってパフォーマンスに違いが見えない場合は、おそらく私はここから完全に離れています。

+0

デフォルトではAeroが無効になっていますが、有効にしてみましたが、パフォーマンスは変更されていません。 –

関連する問題