萌えハッカーニュースリーダー

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

出典: https://cv.co.hu/csabi/drawing-text-performance-graphical-vs-console.html
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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じゃ。

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

うむ、そういうことにしておこうかの!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search