Box2D + WinRTでゲームを作る (2) - 動画出力を試みる

公開:2013-05-20 20:40
更新:2017-07-29 13:17
カテゴリ:direct2d,シューティングゲーム,directx,dxgi,winrt,windows store apps,media foundation,box2d,windows,c++,audio,ゲーム,windows api,box2d + winrtでゲームを作る

作成中の画面を動画にしていたのだが、ちょっと処理速度的に厳しくなってきた。 アマレココでもExpression Encoderでも15FPSで処理がもたつく。デスクトップのキャプチャーは結構重い処理なのであろう。

Media FoundationのSink Writerを使って、スワップチェインのサーフェースをコピーして動画として書き出せばなんとかなりそうなので手を付けてみたけれども、意外に難しい。私が考えている方法はIDXGIOutput::GetDisplaySurfaceDataを使うものだったのだけれども、ざんねんながらWindows Store AppではこのAPIは利用できないようだ。そうすると結構面倒なのだ。実画面を480pのサイズに縮小したいのだけれども、サーフェース間のコピー機能であるID3D11DeviceContext::CopyResourceは拡縮機能はついていない。GetDisplaySurfaceDataは拡縮してくれるのだけれどもね。。 DirectXTKのScreenGrabあたりを見ると、ステージ・テクスチャにコピーして、それをCPUで読みだしてファイルに保存している。等倍でビットマップだとこれでいいのだけれど、動画だとこれをマイフレームやらないといけないのでかなり厳しい。なのでGPU側で縮小させたいのだが。何かいいアイデアはないかと思案しているところである。