Main Content

画面更新

MATLAB グラフィックス システム

MATLAB® グラフィックスは複数の実行スレッドを使用して実装されます。次の図は、更新プロセス中にメイン スレッドとレンダラー スレッドがどのように相互作用するかを示しています。MATLAB 側にはグラフィックス モデルが含まれ、グラフィックス ハードウェアによってレンダリングされる図形を記述しています。レンダラー側には、独自のメモリ システム内にこの図形のコピーが含まれています。グラフィックス ハードウェアは MATLAB の実行をブロックせずに画面をレンダリングすることができます。

グラフィックス モデルを変更する場合は、その更新がグラフィックス ハードウェアに渡されるようにしなければなりません。グラフィックス ハードウェアでは一部の MATLAB データ型がサポートされていないため、更新の送信はボトルネックになる可能性があります。更新プロセスでは、データが正しい形式に変換されなければなりません。

図形がグラフィックス ハードウェアのメモリにある場合、このデータを使用して更新で送信されるデータを最小限にすることで、パフォーマンス上の利点を実現できます。

更新の管理

更新の手順は以下のとおりです。

  • プロパティの変更やオブジェクトの追加など、画面の更新が必要となる変更を収集する。

  • グラフィックス モデル内の依存関係を更新する。

  • これらの更新をレンダラーに送信する。

  • レンダラーがこれらの更新を受け付けるまで待機した後、実行を MATLAB に返す。

関数 drawnow を呼び出して更新を開始します。drawnow はレンダラーが更新を受け入れたときに実行を完了しますが、レンダラーが画面の更新を完了する前にレンダラーが更新を受け入れる場合があります。

明示的な更新

関数の実行中に、グラフィックス オブジェクトを Figure に追加したり、既存のオブジェクトのプロパティを変更したりしても、画面が直ちに更新されないこともあります。更新プロセスは、更新が必要なグラフィックスが変更され、コードで以下の処理が行われるときに発生します。

  • drawnowpausefigure または更新を実際に行う他の関数を呼び出す (drawnow を参照)。

  • 他のプロパティに値が依存しているプロパティをクエリする (自動計算されるプロパティを参照)。

  • 実行を完了し、制御を MATLAB プロンプトまたはデバッガーに返す。