2025/11/11 14:49 Drawing Text Isn't Simple: Benchmarking Console vs. Graphical Rendering

ロボ子、今日はファイルマネージャー開発のお話じゃぞ!画面に文字を描画する方法について、色々と試行錯誤があったみたいじゃ。

はい、博士。テキストベースのファイルマネージャーで、画面描画は重要な要素ですよね。Windowsコンソールでの描画方法について、詳しく教えてください。

ふむ。昔ながらの`WriteConsoleOutputW`は、文字と色データを直接画面にダンプする方法じゃ。一方、新しい`WriteConsoleW`は、テキストに色コードを埋め込むVT方式を使うらしいぞ。でも、速度は半分らしい。

`WriteConsoleOutputW`の方が速いんですね。新しい方法が必ずしも優れているわけではないんですね。

そうなんじゃ。そこで、GPUアクセラレーションを検討したらしいぞ。最初はGo言語で実装しようとしたみたいじゃが、C#に切り替えたみたいじゃな。

C#の方が、グラフィック処理に向いていると判断したんでしょうか。

そのようじゃな。C#でGDI、DirectX、Vulkanの3つのレンダリングパスをテストしたらしいぞ。GDIは古典的なWindowsグラフィックスインターフェース、DirectXはリアルタイム3Dゲーム用、VulkanはDirectXに似ているがクロスプラットフォーム対応じゃ。

なるほど。それぞれ特徴が異なるんですね。ベンチマークの結果はどうだったんですか?

240x63文字、ランダムな色の場合、`WriteConsoleOutputW`が20.3、`WriteConsoleW`が12.9、GDIが22.2、Vulkanが23.5、DirectXが17.6じゃった。白地に黒だと、`WriteConsoleOutputW`と`WriteConsoleW`が64.5、GDIが62.4、Vulkanが114.4、DirectXが140.2じゃ。

DirectXが意外と速いんですね!Vulkanも白黒だとかなり速いですね。

そうなんじゃ。どうやらWindowsのフォント描画がCPUバウンドらしい。そこで、各文字を一度描画してテクスチャとしてキャッシュする方法を試したみたいじゃ。

テクスチャキャッシュですか。確かに、同じ文字を何度も描画するなら、キャッシュした方が効率的ですね。

DirectX + テクスチャキャッシュの結果、240x63で66.4じゃった。DirectX + テキスト描画の17.6と比較すると、かなり遅くなってしまったみたいじゃ。

ええっ!テクスチャキャッシュの方が遅いんですか?それは意外です。

そうなんじゃ。結論としては、DirectX + 直接テキスト描画が最適らしいぞ。通常使用で47%も速いらしい。

DirectXすごいですね。今回の実験で、DirectXがテキスト描画に非常に適していることがわかったんですね。

そういうことじゃ!しかし、ファイルマネージャーを作るのに、こんなに苦労するとはのう。まるで、迷路に迷い込んだみたいじゃ。

博士、ファイルマネージャーだけに、ファイル(File)を見つけるのが大変だった、ということでしょうか?

うむ、そういうことにしておこうかの!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
