mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 18:43:51 +00:00
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:
co-authored by
Claude Opus 4.8
parent
55d5bf01cf
commit
c3a8a14110
+9
-9
@@ -722,8 +722,9 @@ procedure TSpectrumView.DrawSpectrum;
|
||||
var
|
||||
C, GC: TCanvas;
|
||||
i, Yp, W, H, GX: Integer;
|
||||
{$IFNDEF DARWIN}
|
||||
RowLW: PLongWord;
|
||||
AMask: LongWord;
|
||||
{$ENDIF}
|
||||
DBmin, DBmax, dB: Double;
|
||||
VfoX, X1, X2: Integer;
|
||||
TXVfoX, TXX1, TXX2: Integer;
|
||||
@@ -931,13 +932,11 @@ begin
|
||||
if Assigned(FVfoOverlay) then
|
||||
FVfoOverlay.DrawOverlay(FSpectrumBitmap, W, H);
|
||||
|
||||
// Восстанавливаем непрозрачность: Canvas-операции (текст/линии со сглаживанием)
|
||||
// могли занулить альфу. OR маской выставляет альфу в $FF, RGB не меняя.
|
||||
{$IFDEF DARWIN}
|
||||
AMask := $000000FF; // ARGB: альфа в байте 0
|
||||
{$ELSE}
|
||||
AMask := $FF000000; // BGRA: альфа в байте 3
|
||||
{$ENDIF}
|
||||
// Восстановление непрозрачности. На Cocoa проверено, что проход не нужен
|
||||
// (Canvas-операции сохраняют альфу $FF), поэтому там его не делаем.
|
||||
// На Qt6/win32 бэкенд другой и сглаженные края могут занулять альфу —
|
||||
// оставляем быстрый dword-OR до проверки на этих платформах.
|
||||
{$IFNDEF DARWIN}
|
||||
FSpectrumBitmap.BeginUpdate(False);
|
||||
for i := 0 to H - 1 do
|
||||
begin
|
||||
@@ -945,11 +944,12 @@ begin
|
||||
if RowLW = nil then Continue;
|
||||
for Yp := 0 to W - 1 do
|
||||
begin
|
||||
RowLW^ := RowLW^ or AMask;
|
||||
RowLW^ := RowLW^ or $FF000000; // BGRA: альфа в байте 3
|
||||
Inc(RowLW);
|
||||
end;
|
||||
end;
|
||||
FSpectrumBitmap.EndUpdate(False);
|
||||
{$ENDIF}
|
||||
end;
|
||||
|
||||
// ────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user