私は、各ビットマップを〜50msごとに計算して、ピクチャボックスにペイントしてフォームに表示する必要があるソングのビジュアライゼーションを構築しています。XNA/DirectXを使用したDrawImage/DrawLine
残念ながら、DrawImage/DrawLineを使用すると、この画像のレンダリング/ペイントパフォーマンスが高速になりません。
XNA/DirectXを使用して改善する方法はありますか?
どちらがこのタスクに適していますか?
例はありますか?
私は、各ビットマップを〜50msごとに計算して、ピクチャボックスにペイントしてフォームに表示する必要があるソングのビジュアライゼーションを構築しています。XNA/DirectXを使用したDrawImage/DrawLine
残念ながら、DrawImage/DrawLineを使用すると、この画像のレンダリング/ペイントパフォーマンスが高速になりません。
XNA/DirectXを使用して改善する方法はありますか?
どちらがこのタスクに適していますか?
例はありますか?
winformsサンプルと同様の方法でxnaを使用することに同意します。
ビットマップをレンダリングしたり、SpriteBatchを使うのではなく、すべてのラインのすべての端点を含む動的な頂点バッファを作成することで、ラインの外観とパフォーマンスが最適になると思います。その後、DrawUserPrimitives()を使用し、PrimitiveType.paramをPrimitiveType.LineListに指定します。
これはGPUにすべての種類のエフェクト(シェーダ)を作成できるGPUにすべてのポイントを送信しますが、GPUはすべての重い作業を行います。
アプリハブの教育部門のサンプルの中には、この種のレンダリングを使用してグリッドを作成するものがあります。気になるものはperPixelLighting sampleです。あなたは、ある程度3D空間で作業する必要があるかもしれません。
実際、サードパーティのフレームワークを使用しないと直接的な解決策はありませんか? – nr1
@ nr1 XNAはファーストパーティのフレームワークです。 WinFormsでXNAを使用する方法の例については、App HubでXNA WinFormsのサンプルを参照してください。 –
@ Nr1最後のリンクを参照してください。まだビットマップに直接書き込むことができます。私はあなたの問題が描画パフォーマンスではなく、管理されたメモリにアクセスして変更する方法だけであることは確かです。あなたはXNA、SlimDXなどを使ってイメージを塗りつぶすオーバーヘッドをたくさん得ます...適切な最適化をすれば、普通のビットマップを使って達成できると確信しています。もちろん、ビットマップの大きさに依存します。 – dowhilefor