mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +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
|
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;
|
||||||
|
|
||||||
// ────────────────────────────────────────────────────────────────────────────
|
// ────────────────────────────────────────────────────────────────────────────
|
||||||
|
|||||||
Reference in New Issue
Block a user