私は、パンすることができるタイルグラフィックを表示するWPFコントロール(FrameworkElementから継承)を作成しました。各タイルは24bppで256x256ピクセルです。私はOnRenderをオーバーライドしました。そこに、新しいタイル(BitmapFrameとして)をロードし、次に、すべての可視タイルをdrawingContext.DrawImageを使用して描画します。BitmapSourceでのWPFレンダリング
レンダリングサイクルごとに1つ以上の新しいタイルがあると、フレームレートは60秒から0秒に約1秒間低下します。これは、画像の読み込み(ミリ秒単位)やDrawImage(中間レンダリングデータ構造を単に埋めるため、時間がかかりません)によって引き起こされるものではありません。
私は、レンダスレッド自体が新しいBitmapSourceインスタンス(つまり、まだキャッシュされていなかったもの)が大量(〜20)になるたびにチョークすると思います。いずれかの内部DirectX互換の形式に変換するのに多くの時間を費やすか、キャッシュの問題である可能性があります。ビデオRAMを使い果たすことはできません。パーフォレータは60MB以下でピークを示し、私は256MBを持っています。また、Perforatorは、すべてのレンダリングターゲットがハードウェアアクセラレーションであると言います。
洞察力があれば幸いです!事前
ダニエル
でおかげ
@RandomEngy:
BitmapScalingMode.LowQuality問題を少し減少したが、それを取り除くしませんでした。私はすでに意図した解像度でタイルをロードしています。また、それは最新のグラフィックドライバではありません(Nvidia)。
スケーリングにはそれほど時間がかかることに少し驚いています。私がそれを理解している方法では、ビットマップ(サイズに関係なく)はDirect3Dテクスチャとして読み込まれ、その後ハードウェアスケールされます。実際、ビットマップが初めてレンダリングされると、それ以上のフリーズをせずに回転とスケールを変更できます。