2

次のコード スニペットを検討してください。

HRGN clip = ::CreateRectRgn(50, 50, 100, 100);
::SelectClipRgn(context, clip);
::Rectangle(context, 0, 0, 50, 50);

Microsoft のクリッピングの実装は、Rectangle の呼び出しから何も描画せずにすぐに戻るほどインテリジェントですか? おそらくそうだと思いますが、どこにも確認を見つけることができませんでした. クリッピングに関する MSDN のドキュメントは内部の詳細がまばらであり、Google で調べても GDI クリッピングの使用方法しか見つかりません。

編集:これが Windows Mobile で実行されているため、分析用のツールセットが限られていることを指摘できなかったことがわかりました。

4

4 に答える 4

2

実際に Petzold (第 2 版) を棚から取り出してみたところ、当然のことながら、Windows SDK の初期バージョンではクリッピングが重要な機能であることがわかりました。当時は、パフォーマンス上の理由から、目に見えないオブジェクトを描画しないことが必要でした。GDI クリッピングは実際には十分にスマートであり、クリッピング領域の外に描画すると何もしません。

于 2009-03-20T03:27:29.667 に答える
1

試して。

お好みのデバッガー (Windbg、CDB) を接続し、WT コマンドを使用して実行パスの統計をトレースします。比較 ::Rectangle(context, 0, 0, 50, 50); ::Rectangle(コンテキスト、0、0、51、51);

于 2009-03-27T02:11:10.793 に答える
0

SelectClipRgn() のソース コードを見ることができます (Win32 api グループ、何年も前、16 または 32 ビット)

于 2009-03-20T13:26:33.237 に答える
0

私の推定では、ボンネットの下で単純な Cohen-Sutherland ライン クリッピングを使用しているだけですが、それについてはわかりません。ただし、画面の外にある (そして描画すべきではない) データが大量にある場合は、それらをスキップできるように、たとえば Quad-tree に基づく高レベルのカリング アルゴリズムを使用したほうがよい場合があります。オブジェクトはすべて初期段階でまとめられます。

于 2009-03-27T02:24:21.820 に答える