feat(waterfall): палитры Inferno/Turbo + gamma, разрешение до 4096, HiDPI

- SPECTRUM_PIXELS 1024→4096 + настройка display_pixels (лимит точек
  анализатора, SetDisplayResLimit); web-зеркало остаётся 1024 —
  max-децимация в SnapshotPixels
- палитры водопада Classic/Inferno/Turbo + регулятор gamma (в LUT),
  настройки wf_palette/wf_gamma, страница Waterfall → группа Rendering
- GL-водопад переведён на общий LUT/AGC-уровни базового класса
  (убраны дубли ColorForDB/UpdateLevels)
- явные glViewport в GL-вьюхах умножаются на PixelScale (HiDPI),
  текстура водопада — в физической ширине

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-04 16:11:58 +03:00
co-authored by Claude Fable 5
parent 4733ddab58
commit 092a202f5f
10 changed files with 397 additions and 263 deletions
+6 -3
View File
@@ -17,7 +17,8 @@ interface
uses
Classes, SysUtils, Graphics, Controls, Math, Types,
OpenGLContextEx, GL,
AppTheme, SpectrumView, VfoOverlay, BandPlanOverlay, WaterfallViewOpengl;
AppTheme, SpectrumView, VfoOverlay, BandPlanOverlay,
WaterfallView, WaterfallViewOpengl;
type
TGLTextureCache = record
@@ -663,7 +664,7 @@ var
R, G, B: GLFloat;
begin
if Length(FSpY) <> W then SetLength(FSpY, W);
SrcCount := ClampI(FSpectrumBufCount, 2, 1024);
SrcCount := ClampI(FSpectrumBufCount, 2, WF_MAX_PIXELS);
for I := 0 to W - 1 do
begin
if FTXMode and (FTXSpanHz > 0) and (FSpanHz > 0) then
@@ -944,7 +945,9 @@ begin
H := FGLControl.Height;
if (W <= 0) or (H <= 0) then Exit;
glViewport(0, 0, W, H);
// HiDPI: viewport в физических пикселях FBO, координаты — логические
glViewport(0, 0, Round(W * FGLControl.PixelScale),
Round(H * FGLControl.PixelScale));
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glOrtho(0, W, H, 0, -1, 1);