Revert "fix(opengl): use Lazarus OpenGLContext"

This reverts commit 004c363df8.
This commit is contained in:
2026-07-08 11:56:09 +03:00
parent 004c363df8
commit ce9cfd730f
6 changed files with 26 additions and 14 deletions
+3 -2
View File
@@ -25,7 +25,7 @@ uses
Classes, SysUtils, StrUtils, FreqDisplay, DeviceForm, VfoOverlay, SampleRateOverlay, BandPlanOverlay, Classes, SysUtils, StrUtils, FreqDisplay, DeviceForm, VfoOverlay, SampleRateOverlay, BandPlanOverlay,
FlatButton, FlatSlider, FlatDropDown, AppTheme, Forms, Controls, Graphics, Dialogs, FlatButton, FlatSlider, FlatDropDown, AppTheme, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls, Buttons, Menus, Math, Types, StdCtrls, ExtCtrls, Buttons, Menus, Math, Types,
OpenGLContext, OpenGLContextEx,
LCLIntf, LCLType, GraphType, LCLIntf, LCLType, GraphType,
HPSDRProtocol, HPSDRNetwork, HPSDRProtocol, HPSDRNetwork,
WDSP, WDSPEngine, AudioOutput, AudioInput, WDSP, WDSPEngine, AudioOutput, AudioInput,
@@ -1004,7 +1004,8 @@ begin
FSplitterRatio := 0.40; FSplitterRatio := 0.40;
FSplitterDrag := False; FSplitterDrag := False;
// Штатный Lazarus OpenGLContext включается только явным ключом --opengl. // OpenGLContextEx (QOpenGLWidget-бэкенд) работает и в нативном Wayland,
// старая X11-заглушка больше не нужна
FUseOpenGLSpectrum := HasOpenGLSpectrumSwitch; FUseOpenGLSpectrum := HasOpenGLSpectrumSwitch;
if FUseOpenGLSpectrum then if FUseOpenGLSpectrum then
FSpecView := TSpectrumViewOpenGL.Create FSpecView := TSpectrumViewOpenGL.Create
+4 -2
View File
@@ -16,7 +16,7 @@ interface
uses uses
Classes, SysUtils, Graphics, Controls, Math, Types, Classes, SysUtils, Graphics, Controls, Math, Types,
OpenGLContext, GL, OpenGLContextEx, GL,
AppTheme, SpectrumView, VfoOverlay, BandPlanOverlay, AppTheme, SpectrumView, VfoOverlay, BandPlanOverlay,
WaterfallView, WaterfallViewOpengl; WaterfallView, WaterfallViewOpengl;
@@ -980,7 +980,9 @@ begin
H := FGLControl.Height; H := FGLControl.Height;
if (W <= 0) or (H <= 0) then Exit; if (W <= 0) or (H <= 0) then Exit;
glViewport(0, 0, W, H); // HiDPI: viewport в физических пикселях FBO, координаты — логические
glViewport(0, 0, Round(W * FGLControl.PixelScale),
Round(H * FGLControl.PixelScale));
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glLoadIdentity; glLoadIdentity;
glOrtho(0, W, H, 0, -1, 1); glOrtho(0, W, H, 0, -1, 1);
+14 -6
View File
@@ -15,7 +15,7 @@ interface
uses uses
Classes, SysUtils, Graphics, Controls, Math, Classes, SysUtils, Graphics, Controls, Math,
OpenGLContext, GL, OpenGLContextEx, GL,
AppTheme, WaterfallView; AppTheme, WaterfallView;
type type
@@ -322,8 +322,10 @@ end;
procedure TWaterfallViewOpenGL.SetWaterfallBitmapSize(W, H: Integer); procedure TWaterfallViewOpenGL.SetWaterfallBitmapSize(W, H: Integer);
begin begin
if (W <= 0) or (H <= 0) then Exit; if (W <= 0) or (H <= 0) then Exit;
// Ширина текстуры — в физических пикселях (HiDPI): строка водопада должна
// ложиться 1:1 на пиксели фреймбуфера, иначе GL размажет её при увеличении.
if Assigned(FGLControl) and FGLControl.MakeCurrent then if Assigned(FGLControl) and FGLControl.MakeCurrent then
EnsureTexture(W, H); EnsureTexture(Round(W * FGLControl.PixelScale), H);
FWaterfallDirty := True; FWaterfallDirty := True;
end; end;
@@ -334,7 +336,8 @@ end;
procedure TWaterfallViewOpenGL.PaintWaterfall(Sender: TObject); procedure TWaterfallViewOpenGL.PaintWaterfall(Sender: TObject);
var var
W, H: Integer; W, H, TexW: Integer;
Scale: Double;
R, G, B: GLFloat; R, G, B: GLFloat;
begin begin
if Sender is TOpenGLControl then FGLControl := TOpenGLControl(Sender); if Sender is TOpenGLControl then FGLControl := TOpenGLControl(Sender);
@@ -342,7 +345,12 @@ begin
W := FGLControl.Width; W := FGLControl.Width;
H := FGLControl.Height; H := FGLControl.Height;
if (W <= 0) or (H <= 0) then Exit; if (W <= 0) or (H <= 0) then Exit;
glViewport(0, 0, W, H); // HiDPI: viewport покрывает весь FBO (физические пиксели), координаты
// остаются логическими; строка водопада строится в физической ширине.
Scale := FGLControl.PixelScale;
TexW := Round(W * Scale);
glViewport(0, 0, TexW, Round(H * Scale));
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glLoadIdentity; glLoadIdentity;
glOrtho(0, W, H, 0, -1, 1); glOrtho(0, W, H, 0, -1, 1);
@@ -357,10 +365,10 @@ begin
glClearColor(R, G, B, 1); glClearColor(R, G, B, 1);
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
EnsureTexture(W, H); EnsureTexture(TexW, H);
if FWaterfallDirty then if FWaterfallDirty then
begin begin
UploadCurrentRow(W); UploadCurrentRow(TexW);
FWaterfallDirty := False; FWaterfallDirty := False;
end; end;
DrawTextureWrapped(W, H); DrawTextureWrapped(W, H);
+3 -2
View File
@@ -18,7 +18,7 @@ interface
uses uses
Classes, SysUtils, Math, Graphics, Controls, ExtCtrls, Classes, SysUtils, Math, Graphics, Controls, ExtCtrls,
OpenGLContext, GL, AppTheme, WDSP; OpenGLContextEx, GL, AppTheme, WDSP;
type type
TWidebandView = class TWidebandView = class
@@ -1077,7 +1077,8 @@ begin
UploadLabelTextureToGL; UploadLabelTextureToGL;
FGLBackgroundDirty := False; FGLBackgroundDirty := False;
end; end;
glViewport(0, 0, W, H); // HiDPI: viewport в физических пикселях FBO, координаты — логические
glViewport(0, 0, Round(W * C.PixelScale), Round(H * C.PixelScale));
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glLoadIdentity; glLoadIdentity;
glOrtho(0, W, 0, H, -1, 1); glOrtho(0, W, 0, H, -1, 1);
+1 -1
View File
@@ -141,7 +141,7 @@
</RunParams> </RunParams>
<RequiredPackages> <RequiredPackages>
<Item> <Item>
<PackageName Value="LazOpenGLContext"/> <PackageName Value="LazOpenGLContextEx"/>
</Item> </Item>
<Item> <Item>
<PackageName Value="LCL"/> <PackageName Value="LCL"/>
+1 -1
View File
@@ -15,7 +15,7 @@ uses
{$ENDIF} {$ENDIF}
Interfaces, // LCL platform Interfaces, // LCL platform
WindowsDPI, WindowsDPI,
Forms, LazOpenGLContext, Forms, LazOpenGLContextEx,
MainForm, AudioOutput, DeviceForm, FlatButton, FreqDisplay, VfoOverlay, MainForm, AudioOutput, DeviceForm, FlatButton, FreqDisplay, VfoOverlay,
WDSP, WDSPEngine, WebPageHtml, WebServer, WebUtils, WinFirewall, WsClient, WDSP, WDSPEngine, WebPageHtml, WebServer, WebUtils, WinFirewall, WsClient,
Settings, RadioController; Settings, RadioController;