今日は11日目です。今日は画面端付近のマウス処理、リファクタリング、Windows風ウィンドウの描写、画面のちらつく解消と盛りだくさんです。
昨日の段階では、右端にマウスをもっていった場合でもマウスの右端までしっかり表示するように処理していました。そのため、マウス左上のポインタ部分が画面右端まで届かなかったのでこれを解決するようにしています。
しかし、単純にマウスの左端を画面右まで届くようにしても、マウスの右側が画面左から出てきてしまいます。VRAMが走査線のように描写していますからね。そのため、画面から切れたマウスは「描画をしない」という処理が必要になります。ここは、まあ面倒ですが技術的にはそれほど難しくはなかったです。
ウィンドウの描写も昨日までのレイヤー処理の土台があればマウスと同じように書くだけですね。これも問題なし。
ただ、そのままだと結構盛大にチラつきします。再描画するレイヤーを最前面のものだけに限定したり、マウスなど他のレイヤーが重なっているところは不要な再描画はしないようにする必要があります。これを川合氏は画面全体をフラグ管理する方法で解決しています。マウスやウィンドウなどのレイヤーにIDをつけ、全ピクセルごとに表示するレイヤーのIDを管理します。
ふーむ。なんか力技のような気もしますが簡単なアルゴリズムで実装できますし、ハイパフォーマンスでなくてもチラツキ防止になるし、まずは実をとる感じですね。実際、チラツキが抑えられています。
今日もやっていることはわかりましたが、これを自分でイチから実装するとなると大変ですね・・・。
昨日の段階では、右端にマウスをもっていった場合でもマウスの右端までしっかり表示するように処理していました。そのため、マウス左上のポインタ部分が画面右端まで届かなかったのでこれを解決するようにしています。
しかし、単純にマウスの左端を画面右まで届くようにしても、マウスの右側が画面左から出てきてしまいます。VRAMが走査線のように描写していますからね。そのため、画面から切れたマウスは「描画をしない」という処理が必要になります。ここは、まあ面倒ですが技術的にはそれほど難しくはなかったです。
ウィンドウの描写も昨日までのレイヤー処理の土台があればマウスと同じように書くだけですね。これも問題なし。
ただ、そのままだと結構盛大にチラつきします。再描画するレイヤーを最前面のものだけに限定したり、マウスなど他のレイヤーが重なっているところは不要な再描画はしないようにする必要があります。これを川合氏は画面全体をフラグ管理する方法で解決しています。マウスやウィンドウなどのレイヤーにIDをつけ、全ピクセルごとに表示するレイヤーのIDを管理します。
ふーむ。なんか力技のような気もしますが簡単なアルゴリズムで実装できますし、ハイパフォーマンスでなくてもチラツキ防止になるし、まずは実をとる感じですね。実際、チラツキが抑えられています。
今日もやっていることはわかりましたが、これを自分でイチから実装するとなると大変ですね・・・。