10 章: 重ね合わせ処理
10 章は ウィンドウの重ね合わせ処理。ウィンドウといっても今あるのは、背景とマウスカーソルのみなのでレイヤといったほうが分かりやすいかもしれない。各レイヤの構造体が保持する情報は座標、位置、高さ(z-index)、VRAM などを持っている。で、画面の再描画は下のレイヤから指定された領域のみ VRAM を書いていくという処理。また、レイヤを移動させるときは移動前と移動後の 2 つの領域を描画。
と書けば、簡単なのだけど、本章の本質的な内容は再描画処理を如何に軽くするか、すなわち如何にループを少なくするかということでした。なぜループか。
たとえば、
a = hoge[foo + bar] + another_var1; b = hoge[foo + bar] + another_var2;
とあるコードのインデックスの計算をまとめて
int i = foo + bar; a = hoge[i] + another_var1; b = hoge[i] + another_var2;
としても、こんなのはコンパイラの最適化処理の範疇なので生成されるバイナリは両者とも同じになる(メンテナンサビリティは違うけど)。なので、処理速度を早くしようと思ったら、まずはループを疑えということだ。ループ内の処理は×ループ回数で効いてくるからね。
次は改善するとしたら何にになるのかなぁ、数値演算とか? if とか switch とか ?
10 章終わり。











コメントする