diff --git a/MainForm.pas b/MainForm.pas index 6d560dc..5842a2e 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -25,7 +25,7 @@ uses Classes, SysUtils, StrUtils, FreqDisplay, DeviceForm, VfoOverlay, SampleRateOverlay, BandPlanOverlay, FlatButton, FlatSlider, FlatDropDown, AppTheme, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Buttons, Menus, Math, Types, - OpenGLContextEx, + OpenGLContext, LCLIntf, LCLType, GraphType, HPSDRProtocol, HPSDRNetwork, WDSP, WDSPEngine, AudioOutput, AudioInput, @@ -1004,8 +1004,7 @@ begin FSplitterRatio := 0.40; FSplitterDrag := False; - // OpenGLContextEx (QOpenGLWidget-бэкенд) работает и в нативном Wayland, - // старая X11-заглушка больше не нужна + // Штатный Lazarus OpenGLContext включается только явным ключом --opengl. FUseOpenGLSpectrum := HasOpenGLSpectrumSwitch; if FUseOpenGLSpectrum then FSpecView := TSpectrumViewOpenGL.Create diff --git a/SpectrumViewOpengl.pas b/SpectrumViewOpengl.pas index cb90a53..4d5b2c2 100644 --- a/SpectrumViewOpengl.pas +++ b/SpectrumViewOpengl.pas @@ -16,7 +16,7 @@ interface uses Classes, SysUtils, Graphics, Controls, Math, Types, - OpenGLContextEx, GL, + OpenGLContext, GL, AppTheme, SpectrumView, VfoOverlay, BandPlanOverlay, WaterfallView, WaterfallViewOpengl; @@ -980,9 +980,7 @@ begin H := FGLControl.Height; if (W <= 0) or (H <= 0) then Exit; - // HiDPI: viewport в физических пикселях FBO, координаты — логические - glViewport(0, 0, Round(W * FGLControl.PixelScale), - Round(H * FGLControl.PixelScale)); + glViewport(0, 0, W, H); glMatrixMode(GL_PROJECTION); glLoadIdentity; glOrtho(0, W, H, 0, -1, 1); diff --git a/WaterfallViewOpengl.pas b/WaterfallViewOpengl.pas index 8f5537e..11597fc 100644 --- a/WaterfallViewOpengl.pas +++ b/WaterfallViewOpengl.pas @@ -15,7 +15,7 @@ interface uses Classes, SysUtils, Graphics, Controls, Math, - OpenGLContextEx, GL, + OpenGLContext, GL, AppTheme, WaterfallView; type @@ -322,10 +322,8 @@ end; procedure TWaterfallViewOpenGL.SetWaterfallBitmapSize(W, H: Integer); begin if (W <= 0) or (H <= 0) then Exit; - // Ширина текстуры — в физических пикселях (HiDPI): строка водопада должна - // ложиться 1:1 на пиксели фреймбуфера, иначе GL размажет её при увеличении. if Assigned(FGLControl) and FGLControl.MakeCurrent then - EnsureTexture(Round(W * FGLControl.PixelScale), H); + EnsureTexture(W, H); FWaterfallDirty := True; end; @@ -336,8 +334,7 @@ end; procedure TWaterfallViewOpenGL.PaintWaterfall(Sender: TObject); var - W, H, TexW: Integer; - Scale: Double; + W, H: Integer; R, G, B: GLFloat; begin if Sender is TOpenGLControl then FGLControl := TOpenGLControl(Sender); @@ -345,12 +342,7 @@ begin W := FGLControl.Width; H := FGLControl.Height; if (W <= 0) or (H <= 0) then Exit; - // HiDPI: viewport покрывает весь FBO (физические пиксели), координаты - // остаются логическими; строка водопада строится в физической ширине. - Scale := FGLControl.PixelScale; - TexW := Round(W * Scale); - - glViewport(0, 0, TexW, Round(H * Scale)); + glViewport(0, 0, W, H); glMatrixMode(GL_PROJECTION); glLoadIdentity; glOrtho(0, W, H, 0, -1, 1); @@ -365,10 +357,10 @@ begin glClearColor(R, G, B, 1); glClear(GL_COLOR_BUFFER_BIT); - EnsureTexture(TexW, H); + EnsureTexture(W, H); if FWaterfallDirty then begin - UploadCurrentRow(TexW); + UploadCurrentRow(W); FWaterfallDirty := False; end; DrawTextureWrapped(W, H); diff --git a/WidebandView.pas b/WidebandView.pas index 520a8e1..3ddf318 100644 --- a/WidebandView.pas +++ b/WidebandView.pas @@ -18,7 +18,7 @@ interface uses Classes, SysUtils, Math, Graphics, Controls, ExtCtrls, - OpenGLContextEx, GL, AppTheme, WDSP; + OpenGLContext, GL, AppTheme, WDSP; type TWidebandView = class @@ -1077,8 +1077,7 @@ begin UploadLabelTextureToGL; FGLBackgroundDirty := False; end; - // HiDPI: viewport в физических пикселях FBO, координаты — логические - glViewport(0, 0, Round(W * C.PixelScale), Round(H * C.PixelScale)); + glViewport(0, 0, W, H); glMatrixMode(GL_PROJECTION); glLoadIdentity; glOrtho(0, W, 0, H, -1, 1); diff --git a/ewsdr.lpi b/ewsdr.lpi index 61aea45..0b3b6b3 100644 --- a/ewsdr.lpi +++ b/ewsdr.lpi @@ -141,7 +141,7 @@ - + diff --git a/ewsdr.lpr b/ewsdr.lpr index 317be48..fe2c468 100644 --- a/ewsdr.lpr +++ b/ewsdr.lpr @@ -15,7 +15,7 @@ uses {$ENDIF} Interfaces, // LCL platform WindowsDPI, - Forms, LazOpenGLContextEx, + Forms, LazOpenGLContext, MainForm, AudioOutput, DeviceForm, FlatButton, FreqDisplay, VfoOverlay, WDSP, WDSPEngine, WebPageHtml, WebServer, WebUtils, WinFirewall, WsClient, Settings, RadioController;