feat(display): скорость водопада с max-hold накоплением + MSAA спектра

- настройка Speed (wf_speed_div 1/2/4/8, Waterfall→Rendering): замедление
  накапливает кадры max-hold'ом в SetWaterfallData — короткие посылки (CW)
  не выпадают из строки; двойная децимация MainForm убрана
  (EffectiveWfInterval, CPU-путь не быстрее полукадровой)
- настройка Anti-aliasing (spec_msaa 1/2/4/8, дефолт 4x, Spectrum→Rendering):
  MultiSampling на GL-контроле спектра; смена в рантайме пересоздаёт
  контекст → ResetGLCache обнуляет текстурные кэши без glDelete

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-04 16:48:55 +03:00
co-authored by Claude Fable 5
parent 092a202f5f
commit e260995218
6 changed files with 164 additions and 35 deletions
+8
View File
@@ -253,6 +253,8 @@ type
WfPalette: Integer; // 0=Classic, 1=Inferno, 2=Turbo
WfGamma: Double; // контраст палитры (0.3..3.0, 1.0 = линейно)
DisplayPixels: Integer; // потолок точек анализатора (1024/2048/4096)
WfSpeedDiv: Integer; // делитель скорости водопада (1/2/4/8, max-hold)
SpecMSAA: Integer; // MSAA GL-спектра (1=off, 2, 4, 8)
SpecRefLevel: Double; // dBm reference (top of scale), e.g. -20
SpecRange: Double; // dB range, e.g. 110 (bottom = ref - range)
SpecGridStep: Double; // grid step in dB, e.g. 10
@@ -449,6 +451,8 @@ begin
G.WfPalette := 0; // Classic
G.WfGamma := 1.0;
G.DisplayPixels := 4096; // 1:1 до 4K-ширины
G.WfSpeedDiv := 1; // полная скорость
G.SpecMSAA := 4; // сглаживание кривой спектра
G.SpecRefLevel := -20.0;
G.SpecRange := 110.0;
G.SpecGridStep := 10.0;
@@ -675,6 +679,8 @@ begin
G.WfPalette := JI(GObj,'wf_palette',0);
G.WfGamma := JD(GObj,'wf_gamma',1.0);
G.DisplayPixels := JI(GObj,'display_pixels',4096);
G.WfSpeedDiv := JI(GObj,'wf_speed_div',1);
G.SpecMSAA := JI(GObj,'spec_msaa',4);
G.SpecRefLevel := JD(GObj,'spec_ref_level',-20.0);
G.SpecRange := JD(GObj,'spec_range',110.0);
G.SpecGridStep := JD(GObj,'spec_grid_step',10.0);
@@ -783,6 +789,8 @@ begin
JW(O,'wf_palette',G.WfPalette);
JW(O,'wf_gamma',G.WfGamma);
JW(O,'display_pixels',G.DisplayPixels);
JW(O,'wf_speed_div',G.WfSpeedDiv);
JW(O,'spec_msaa',G.SpecMSAA);
JW(O,'spec_ref_level',G.SpecRefLevel);
JW(O,'spec_range',G.SpecRange);
JW(O,'spec_grid_step',G.SpecGridStep);