みくびっていました orz
BayGUIリライトのためにとりあえずデバッグの楽なSDLを使っているのですが、NOIZ2BGが思ったより早くなかったのでこんなもんか・・とみくびっていました。BayGUIではダブルバッファリングを行っていまして、SDL版ではSDL_UpdateRectという関数でスクリーンに実際に描画を行っています。この関数は引数に更新範囲を指定できます。いままでは指定なし(スクリーン全体を更新)にしていましたが、更新範囲をきっちり指定してみたところ劇的に早くなりました。現状のコードに満足するな!ですね(XPでは日々リファクタリングを薦めています)。
/* screenの全領域を更新 */ SDL_UpdateRect(screen, 0, 0, 0, 0); ↓ /* screenの一部領域を更新 */ SDL_UpdateRect(screen, this->x, this->y, this->width, this->height);
MonaのGUIサーバーはアプリケーションフレームも部品もすべてウィンドウ(いわゆるWin32APIのウィンドウと同義)として管理しています。しかし親をもっているウィンドウ(一般的な部品)に再描画メッセージを送っても親ウィンドウが再描画されない限り画面に反映されることがありません。この辺りをなんとかしたいと思いつつも描画系やイベント系をいじるとBayGUIだけじゃなく、MonaFormsにも影響が出るのでずっと躊躇しているんですよね・・。MonaForms(というかGUIサーバー)のリファクタリングとパフォーマンスチューンを行ってくれる方を強く希望しています。