Skip to main content

draw_linear_gradient

Function draw_linear_gradient 

Source
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)なら 行ごとに boxfill 1 回 = 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