プチコン3号 VSYNCの効果
- プチコン3号にVSYNCという命令がある。
- VSYNC命令を呼び出すと、つぎの1/60secのタイミングまで待つ。
- 画面更新のタイミングが1/60secごとなので、1/60ごとに画面を更新するために使う命令。
と書かれているけど、よくわからないのでプログラムを作って動作を考察した。
作るもの:VSYNCの効果を確かめるために作るプログラム
- 無限ループのなかで、MAINCNT*1の値を画面に表示させる。
ループが1回が実行されるたびにMAINCNTの値がコンソールに表示されます。 - 無限ループ中にVSYNCを入れた時と入れなかったときでタイマのカウント値を比較。
作ったプログラム:VSYNCあり
実行結果:VSYNCあり
- 無限ループの最後でVSYNCがあり、このVSYNCで次の1/60secまで待機する。
- 次の1/60secがきたら、VSYNCを抜けて次のループが実行される。
- 結果、画面に表示されるMAINCNTの値は1ずつ増える。
作ったプログラム:VSYNCなし
実行結果:VSYNCなし
- 無限ループの最後にVSYNCがないので、ループはどこにも待ち時間が発生せずできる限り高速にくるくる回る。
- 1/60secの間に何回もループが回るので、画面にMAINCNTの値が同じ値で何回も表示される。
まとめ
- ループの中でVSYNC使わなかった場合は、画面に出ているだけで27回くらい表示されてますね。。
つまり、1/60secのなかで少なくとも27回はループが実行されています。 - ループの中でVSYNCを使った場合は、1/60secで1回だけループが実行されています。
- New Nintendo 3DSと旧Nintendo 3DSは載っているCPUが違うので、VSYNCを使わずにループ処理した場合はNewの方がループ回数が多くなります。VSYNCを使えばどちらもきっちり1/60ごとに処理を実行させることができます。