(6)ちらちらしない

まだ表示がちらちらするので

動いていくと円がちらちらします。はじめは input で、 nowait をつけているのに入力のためのウインドウを出し、すぐに引っ込めているのでそれに時間をとられているせいだと思っていたのですが、違いました。次の対策でスムーズに動くようになります。

DRAW MODE

SET DRAW MODE HIDDEN という命令を実行してから、○を消したり描いたりします。書き終わったら、SET DRAW MODE EXPLICIT という命令を実行して画面に反映することにします。下図の色の付いた部分を書き加えるだけです。

maru06.bas(ちょっと改良)

   SET DRAW MODE HIDDEN 
   SET AREA COLOR 0
   DRAW disk WITH SCALE(10)*SHIFT(ox,oy)
   SET AREA COLOR 2
   DRAW disk WITH SCALE(10)*SHIFT(x,y)
   SET DRAW MODE EXPLICIT

どうして?

windowsを走らせているコンピュータの内部機構として、演算をしたり記憶を処理する中央処理装置(CPU)の他に、画面を表示するための画像処理装置(GPU)があります。CPUは画像データを表示のためのメモリに書き込みます。GPUはそのデータを読み出してディスプレイを動作させる信号に変換しています。CPUもGPUも同じメモリにアクセスするのですが、片方がアクセスしている最中は他方がアクセスできません。アクセスがぶつかるときにちらちらするのです。

そこで DRAW MODE を HIDDEN にします。これでGPUがアクセスしてこない別のメモリにのみ描画するモードになります。別のメモリに書き込んだものは画面に反映されません。前の円を消し、次の円を書き終わってから、EXPLICIT に戻します。これで別のメモリのデータを本来のGPUがアクセスするメモリにまとめて書き込みます。結果としてCPUが共有メモリにアクセスする回数が減るのでぶつかることが少なくなります。


聖愛高等学校
http://www.seiai.ed.jp/