Skip to main content

Module gradient_lut

Module gradient_lut 

Source
Expand description

linear-gradient のラスタライズ補助(LUT の段数決定と軸判定)。

仕様は spec/gradient_raster.md

§なぜ必要か

実測で描画 1 フレーム 300 tick のうち 112 tick(37%) が グラデーションだった。現行実装は 1 ピクセルごとに sample_gradient_stops(ストップ配列の線形走査+4 チャンネルの 浮動小数補間)を呼んでおり、924×600 なら 55 万回になる。

t から色への写像はピクセル位置に依存しないので、 軸方向の長さぶんの LUT を先に作れば呼び出し回数は length 回で済む。

§不変条件(G-1〜G-4)

  • G-1: 軸平行(0/90/180/270deg)は現行と厳密に同一の出力
  • G-2: 斜めのずれは軸方向 1 段(1 ピクセル相当)以内
  • G-3: ストップ 0 個/1 個の挙動は現行のまま
  • G-4: アルファはピクセル単位で合成(LUT には合成前の色を入れる)

Enums§

Axis
グラデーション軸の向き。

Constants§

AXIS_EPS 🔒
dx / dy が 0 とみなせるかの閾値。
MAX_LUT
LUT の上限段数。

Functions§

classify_axis
dx, dy から軸平行かどうかを判定する。
lut_index
t(0.0〜1.0 想定)を LUT の添字へ変換する。
lut_size
射影長 length(ピクセル)から LUT の段数を決める。