4

理想的には、複数のワーカー スレッドで画面外のレンダー ターゲットにレンダリングし、レンダリングされたコンテンツを画面上のターゲットに「転送」できるようにしたいと考えています。hwnd レンダー ターゲットでは、これは問題ではないようです (msdn に例があります)。

画面上のレンダー ターゲットが DXGI スワップ チェーンに基づいている場合の方法がよくわかりません。私の知る限り、ウィンドウごとに 1 つのスワップ チェーンしか持てません。したがって、スワップ チェーンに基づくレンダー ターゲットは 1 つしか持てません。これは、オンスクリーン レンダリングがその単一のレンダー ターゲットを介してのみ実行できることを意味します。

上記の仮定が正しければ、マルチスレッド レンダリングを処理する最善の方法は何ですか? 画面上のターゲットへのアクセスをシリアル化する必要がありますか? ワーカー スレッドは単一のマルチスレッド d2d ファクトリを共有する必要がありますか? 適切なロック メカニズムが配置されている場合、画面上のターゲットの BeginDraw/EndDraw/Present をワーカー スレッド (つまり、画面上のターゲットを作成しなかったスレッド) で実行できますか?

提案をいただければ幸いです。ありがとう。

4

2 に答える 2

1

オフスクリーン レンダー ターゲットの場合、個別の D2DFactories を作成し、CreateWicBitmapRenderTarget または CreateDxgiSurfaceRenderTarget を使用して作成されたそれぞれのオフスクリーン レンダー ターゲットにアタッチできます。オンスクリーン ターゲットに転送する間、すべてのスレッドが終了するのを待ってから、各オフスクリーン RT をオンスクリーン RT に 1 つずつ転送する必要があります。

于 2011-06-14T08:27:28.743 に答える