fix(opengl): use Lazarus OpenGLContext

Replace OpenGLContextEx with OpenGLContext in MainForm, SpectrumViewOpengl, WaterfallViewOpengl, and WidebandView.

Switch the Lazarus project/program dependencies from LazOpenGLContextEx to LazOpenGLContext in ewsdr.lpi and ewsdr.lpr.

PixelScale was introduced in 092a202; restore the previous viewport/texture path: glViewport(0, 0, W, H), EnsureTexture(W, H), and UploadCurrentRow(W).
This commit is contained in:
2026-07-07 23:30:35 +03:00
parent e13d610a23
commit 004c363df8
6 changed files with 14 additions and 26 deletions
+2 -3
View File
@@ -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
+2 -4
View File
@@ -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);
+6 -14
View File
@@ -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);
+2 -3
View File
@@ -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);
+1 -1
View File
@@ -141,7 +141,7 @@
</RunParams>
<RequiredPackages>
<Item>
<PackageName Value="LazOpenGLContextEx"/>
<PackageName Value="LazOpenGLContext"/>
</Item>
<Item>
<PackageName Value="LCL"/>
+1 -1
View File
@@ -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;