GDI+とXNAを超えて C# でグラフィックスをレンダリングする別の方法はありますか?
(タイルマップエディタの開発用)
はい、DirectX 9.0 をラップし、ビデオ サーフェスのピクセル レベルの直接操作を提供する Windows フォーム コントロールを作成しました。
私は実際にスタック オーバーフローに関する別の投稿を書き、他のより良いアプローチがあるかどうかを尋ねました。
比較的高性能ですが、ポインタを使用してメモリに効率的にアクセスするため、unsafe コンパイラ オプションが必要です。したがって、この以前の投稿の理由。
これは、必要な手順の概要です。
Lock
、バックバッファ サーフェスを作成し、返されたポインタをサーフェス メモリの先頭に格納します。Unlock
バックバッファ面。表面を提示します。このアプローチを採用する場合、ターゲット サーフェスの現在の表示モード (ピッチとピクセルあたりのビット数) を確認する際には十分に注意する必要があることに注意してください。また、プログラムの実行中にウィンドウのサイズ変更や画面フォーマットの変更に対処するための戦略を用意する必要があります。
より高速な 3D グラフィックスのためのマネージ DirectX (Microsoft.DirectX 名前空間)。これは、DirectX API に対する堅実な .NET ラッパーであり、.NET オブジェクトの作成とマーシャリングのパフォーマンスが少し低下します。フル機能の最新の 3D エンジンを作成していない限り、問題なく動作します。
Window Presentation Foundation (WPF) (Windows.Media 名前空間) - 2D グラフィックスに最適です。3D 機能も制限されています。Windows フォームをベクトルに置き換えることを目的としており、ハードウェア アクセラレーションによる解像度に依存しないフレームワーク。非常に便利で、カスタム コントロール、リソース、データ バインディング、イベント、およびコマンドのいくつかのフレーバーをサポートしています。いくつかの WTF もあります。速度は通常、GDI よりも速く、DirectX よりも遅く、やり方に大きく依存します (賢明な方法で書き直した後、60 倍速く動作するものを見たことがあります)。私たちは、リアルタイムのインジケーター、グラフ、およびプロットでいっぱいの 3 つの 1280x1024 画面を 1 台の (そして最高ではない) PC に実装することに成功しました。
Visual Studio や Expression Blend を使用して、WPF を調べることができます。どれほど洗練されたものを目指しているのかはわかりませんが、単純なエディターを処理できるはずです。詳細については、このMSDN の記事を参照してください。
Cairo グラフィック ライブラリを調べることができます。Monoプロジェクトには、C# のバインディングがあります。