描画について調べる

描画は重要な部分なので細かく調べていきましょう。

手順としてはHelloWorldを解析していきます。

まずVRAMに直接書いている点についてですが
pgGetVramAddr関数にて描画位置アドレスを取得しています。
この関数はpc.cにて定義されているので中身を見てみると
return pg_vramtop+(pg_drawframe?FRAMESIZE:0)+x*PIXELSIZE*2+y*LINESIZE*2+0x40000000;
となっていて,わかりやすく座標指定を無くすと
return pg_vramtop+(pg_drawframe?FRAMESIZE:0)+0x40000000;
となり,0x40000000のアドレスに0x04000000(pg_drawframeの格納値)を足し
そこからさらに0x44000(FRAMESIZEの格納値)を足すかどうかを判定して入れています。


ここからわかる事は0x44000000から開始していて
0x44000足した地点を2画面目としてダブルバッファを実現している用です。
(0x44000は10進数に治してみると512*272*16ビットカラーの画面分と同じですね
1画面目のすぐ下に2画面目を持っているのがこれでわかります。)
これによりpgGetVramAddrで取得される描画ポインタは常に現在表示されていない面が指定され
そちらにかかれます。
そしてフレームの最後にpgScreenFlipVを呼び出し,
pspDisplaySetFrameBuf関数にて書き込みを表画面に切り替えていますね。
これでやっと目に見える状態になります。