2012-05-14 115 views
1

Direct2D APIを使用してID2D1RenderTargetを使用して描画するウィンドウの内容をスクロールします。Direct2D APIを使用してウィンドウコンテンツをスクロールする方法は?

GDIでは、CreateCompatibleDCでバッファを作成し、後でその内容をScrollDCでスクロールし、公開領域を再描画し、BitBltをウィンドウに書き出すことができました。

私は、同じ操作を実行するためのDirect2Dのあらゆる必要なAPIを参照することはできません。 GetDC(およびGDI)を使用しないで、独自の3番目のバッファを使用せずに同じ機能を実現するにはどうすればよいですか?

答えて

2

Direct2DのにはスクロールAPIはありません。ハードウェアアクセラレーションスクロールを取得する最良のソリューションは、2番目のバッファを使用することです。スクロールするID2D1RenderTargetCreateCompatibleRenderTarget()を使用して、ID2D1RenderTarget::GetPixelSize()と同じピクセルサイズで、ID2D1RenderTarget::GetDpi()から返された解像度と同じ解像度でID2D1BitmapRenderTarget(このユーザーをキャッシュすることをお勧めします)を作成します。次にID2D1BitmapRenderTarget::GetBitmap()を使用して、基礎となるID2D1Bitmapを取得します。次に、ID2D1Bitmap::CopyFromRenderTarget()を使用して、スクロールしている距離に合わせて内容をコピーします。その後、そのビットマップの内容を元のレンダリングターゲットにコピーし、覆われていない領域を再描画し、(EndDrawを介して)表示します。

+0

私は避けたい独自の第3のバッファーソリューションを記述しました。余分なメモリと余分なbitblt(マルチモニタ設定で目立つことがあります)を意味します。 – Roman

+0

ええ、私はそれがあなたがする必要があることを指摘していました。スクロール用の組み込みAPIはありません。 –

+0

2つのDirectX APIの間でサーフェスを共有できることを読んだところ、ウィンドウにDirect2Dレンダリングとコンテンツをスクロールすることができますが、成功しなかった部分を共有しようとしていました。 – Roman

1

DXGI 1.2ではDXGI_PRESENT_PARAMETERS パラメータを使用して新しいIDXGISwapChain1::Present1 API呼び出しがあります。スクロールウィンドウの内容をサポートする機能が含まれています。

関連する問題