pub fn draw_linear_gradient(
screen: &Screen,
x0: i32,
y0: i32,
w: i32,
h: i32,
grad: &LinearGradient,
)Expand description
計算量: O(W×H)(LUT 化後)— W,H は塗る矩形のサイズ。
内訳:
- LUT 構築: O(L × S) — L =
lut_size(射影長)(軸方向 1px に 1 段)、 S = ストップ数。sample_gradient_stopsを L 回呼ぶ - 塗り: 軸平行(0/180deg)なら 行ごとに
boxfill1 回 = O(H) 回の呼び出し。 斜めなら 1 ピクセルずつ O(W×H)
【2026-07-31 改善】以前は 1 ピクセルごとに sample_gradient_stops
(ストップ配列の線形走査+4 チャンネル浮動小数補間)を呼んでおり
O(W×H×S) だった。924×600 で 55 万回。実測で描画 1 フレームの
37%(112 tick)を占めていた → LUT 化で 62〜70 tick へ。
詳細は spec/gradient_raster.md。