Drop per-frame alpha-restore pass on macOS spectrum

On Cocoa the full-bitmap alpha-restore pass is unnecessary: Canvas
operations keep alpha at $FF and the cached grid background is opaque,
so removing it cuts a full-frame O(W*H) pass per spectrum frame with no
visual change (verified on macOS).

Kept under {$IFNDEF DARWIN} for Qt6/win32 (different drawing backends
may zero alpha on antialiased edges) until visually verified there.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Uladzimir Karpenka
2026-05-29 14:31:18 +03:00
co-authored by Claude Opus 4.8
parent 55d5bf01cf
commit c3a8a14110
+9 -9
View File
@@ -722,8 +722,9 @@ procedure TSpectrumView.DrawSpectrum;
var var
C, GC: TCanvas; C, GC: TCanvas;
i, Yp, W, H, GX: Integer; i, Yp, W, H, GX: Integer;
{$IFNDEF DARWIN}
RowLW: PLongWord; RowLW: PLongWord;
AMask: LongWord; {$ENDIF}
DBmin, DBmax, dB: Double; DBmin, DBmax, dB: Double;
VfoX, X1, X2: Integer; VfoX, X1, X2: Integer;
TXVfoX, TXX1, TXX2: Integer; TXVfoX, TXX1, TXX2: Integer;
@@ -931,13 +932,11 @@ begin
if Assigned(FVfoOverlay) then if Assigned(FVfoOverlay) then
FVfoOverlay.DrawOverlay(FSpectrumBitmap, W, H); FVfoOverlay.DrawOverlay(FSpectrumBitmap, W, H);
// Восстанавливаем непрозрачность: Canvas-операции (текст/линии со сглаживанием) // Восстановление непрозрачности. На Cocoa проверено, что проход не нужен
// могли занулить альфу. OR маской выставляет альфу в $FF, RGB не меняя. // (Canvas-операции сохраняют альфу $FF), поэтому там его не делаем.
{$IFDEF DARWIN} // На Qt6/win32 бэкенд другой и сглаженные края могут занулять альфу —
AMask := $000000FF; // ARGB: альфа в байте 0 // оставляем быстрый dword-OR до проверки на этих платформах.
{$ELSE} {$IFNDEF DARWIN}
AMask := $FF000000; // BGRA: альфа в байте 3
{$ENDIF}
FSpectrumBitmap.BeginUpdate(False); FSpectrumBitmap.BeginUpdate(False);
for i := 0 to H - 1 do for i := 0 to H - 1 do
begin begin
@@ -945,11 +944,12 @@ begin
if RowLW = nil then Continue; if RowLW = nil then Continue;
for Yp := 0 to W - 1 do for Yp := 0 to W - 1 do
begin begin
RowLW^ := RowLW^ or AMask; RowLW^ := RowLW^ or $FF000000; // BGRA: альфа в байте 3
Inc(RowLW); Inc(RowLW);
end; end;
end; end;
FSpectrumBitmap.EndUpdate(False); FSpectrumBitmap.EndUpdate(False);
{$ENDIF}
end; end;
// ──────────────────────────────────────────────────────────────────────────── // ────────────────────────────────────────────────────────────────────────────