mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
ui: плашка ADC OVERLOAD — общий образ CPU/GL без пер-кадрового жора
AlertOverlay переписан в общий builder: BuildAlertImage строит RGBA-образ плашки (попиксельная альфа, Canvas один раз на своём битмапе). GL грузит образ текстурой (кэш как был), CPU блендит кэш в raw-кадр — убраны canvas-путь в кадре и полный проход восстановления альфы битмапа. GL-плашка теперь 1:1 с CPU (было: упрощённый бокс по центру), позиция — правый верхний угол в обоих рендерах. Удалена мёртвая подсветочная линия (перекрывалась рамкой). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+18
-25
@@ -17,7 +17,7 @@ interface
|
||||
uses
|
||||
Classes, SysUtils, Graphics, Controls, Math, Types,
|
||||
OpenGLContextEx, GL,
|
||||
AppTheme, SpectrumView, VfoOverlay, BandPlanOverlay,
|
||||
AppTheme, AlertOverlay, SpectrumView, VfoOverlay, BandPlanOverlay,
|
||||
WaterfallView, WaterfallViewOpengl;
|
||||
|
||||
type
|
||||
@@ -887,37 +887,30 @@ begin
|
||||
end;
|
||||
|
||||
procedure TSpectrumViewOpenGL.DrawADCOverlay(W, H: Integer);
|
||||
// Тот же образ, что CPU-путь (AlertOverlay.BuildAlertImage — единственный
|
||||
// источник внешнего вида): грузится текстурой ОДИН раз при появлении плашки
|
||||
// (кэш FADCOverlayTex), в кадре — только готовый DrawTexture.
|
||||
var
|
||||
B: TBitmap;
|
||||
Img: TAlertImage;
|
||||
begin
|
||||
if not FADCOverloadVisible then Exit;
|
||||
if (W < 220) or (H < 60) then Exit; // как CPU-путь
|
||||
if (not FLastADCVisible) or FADCOverlayTex.Dirty then
|
||||
begin
|
||||
B := TBitmap.Create;
|
||||
try
|
||||
B.PixelFormat := pf32bit;
|
||||
B.SetSize(210, 38);
|
||||
B.Canvas.Brush.Color := TColor($00202020);
|
||||
B.Canvas.FillRect(Rect(0, 0, B.Width, B.Height));
|
||||
B.Canvas.Pen.Color := TColor($000030C0);
|
||||
B.Canvas.Brush.Style := bsClear;
|
||||
B.Canvas.Rectangle(0, 0, B.Width, B.Height);
|
||||
B.Canvas.Font.Name := 'Courier New';
|
||||
B.Canvas.Font.Size := 10;
|
||||
B.Canvas.Font.Style := [fsBold];
|
||||
B.Canvas.Font.Color := TColor($000030C0);
|
||||
B.Canvas.TextOut(12, 5, 'ADC OVERLOAD');
|
||||
B.Canvas.Font.Size := 7;
|
||||
B.Canvas.Font.Style := [];
|
||||
B.Canvas.Font.Color := TColor($00D0D0D0);
|
||||
B.Canvas.TextOut(12, 21, 'Input clipping detected');
|
||||
UploadBitmap(FADCOverlayTex, B, False, 232);
|
||||
finally
|
||||
B.Free;
|
||||
end;
|
||||
BuildAlertImage('ADC OVERLOAD', 'Input clipping detected', Img);
|
||||
if FADCOverlayTex.Tex = 0 then glGenTextures(1, @FADCOverlayTex.Tex);
|
||||
FADCOverlayTex.W := Img.W;
|
||||
FADCOverlayTex.H := Img.H;
|
||||
glBindTexture(GL_TEXTURE_2D, FADCOverlayTex.Tex);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Img.W, Img.H, 0, GL_RGBA,
|
||||
GL_UNSIGNED_BYTE, @Img.RGBA[0]);
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
FADCOverlayTex.Dirty := False;
|
||||
end;
|
||||
FLastADCVisible := True;
|
||||
DrawTexture(FADCOverlayTex, (W - FADCOverlayTex.W) div 2, 8);
|
||||
DrawTexture(FADCOverlayTex, W - FADCOverlayTex.W - ALERT_PAD, ALERT_PAD);
|
||||
end;
|
||||
|
||||
procedure TSpectrumViewOpenGL.DrawCachedOverlays(W, H: Integer);
|
||||
|
||||
Reference in New Issue
Block a user