現在、X のほとんどの実装はグラフィック カードの 2D ハードウェアを使用しているため、この 2 つの違いはおそらく無視できる程度です。
これはパフォーマンスに関する質問なので、私の答えが正しい可能性は約 10% です (パフォーマンスに関しては、測定しないと間違っている可能性が 90% あります)。確認したい場合は、小さなパフォーマンス テストを作成して自分で確認するしかありません。
x11perfが役立つかもしれません。
ハードウェアに依存しないポリゴン塗りつぶしのアルゴリズムは、http: //cvsweb.xfree86.org/cvsweb/xc/programs/Xserver/mi/mipolygen.c ?rev=HEAD にあります。
ポリゴンが凸面であることが確実な場合は、はるかに高速な 2 番目のバージョンがあります: http://cvsweb.xfree86.org/cvsweb/xc/programs/Xserver/mi/mipolycon.c?rev=HEAD
2 番目のバージョンは、塗りつぶし規則を無視します (これは凸多角形には適用されません)。アルゴリズムに関するコメント: http://cvsweb.xfree86.org/cvsweb/xc/programs/Xserver/mi/mipoly.h?rev=HEAD
アルゴリズムは次のように機能します。アウトラインを計算し、エッジ間にスパン オブジェクト (軸、y 座標と幅のみ) を作成します。EvenOdd ルールを使用すると、交差がある場合にさらにスパン オブジェクトが作成されます。何もない場合 (たとえば、多角形が凸状の場合)、実行時の違いはわかりません。これは、塗りつぶしルールが miFillPolygon のメイン ループのブール変数になるためです (つまり、ほとんどのコードは両方で同じです)。塗りつぶしルール)。
ポリゴンのアウトラインを最適化してパフォーマンスを改善しようとしても、ポリゴンに非常に多くの不要なポイントが含まれていることがわかっている場合を除いて、一般的なケースではあまり効果がありません (たとえば、ポリゴン内のポイント数の半分を取り除くことができます)。よくあるケース)。10 個未満のポイントでポリゴンを最適化すると、おそらくそれ以上のコストがかかります。
しかし、繰り返しになりますが、これはすべて直感や古い記事の知識に基づいています. gfx カード ドライバのバグが結果を台無しにしているかどうかを知りたい場合は、手を汚して、各ケースにかかる時間を測定するテストを作成する必要があります。外部要因のため、複雑なアルゴリズムのランタイムを単純に調べる方法はありません: メモリ割り当てルーチンの速度、空きメモリの量 (いつスワッピングを開始するか)、使用できる CPU コアの数、使用できる CPU コアの数他のプロセスは、CPU、画面上の最終的なポリゴンのクリッピング、実装の詳細と最適化、バグなどのためにあなたと戦うでしょう.