Guard OpenGL mode on native Wayland

This commit is contained in:
2026-05-26 11:06:55 +03:00
parent 08c5f0ddb7
commit 762fad420e
3 changed files with 63 additions and 0 deletions
+17
View File
@@ -35,6 +35,7 @@ uses
CATEngine, CATSerial, CATTcp,
SpectrumView, SpectrumViewOpengl,
StatusBar,
PlatformUtils,
WinFirewall;
const
@@ -1469,6 +1470,22 @@ begin
FSplitterDrag := False;
FUseOpenGLSpectrum := HasOpenGLSpectrumSwitch;
if FUseOpenGLSpectrum and (not QtPlatformAllowsOpenGLControls) then
begin
MessageDlg('OpenGL rendering disabled',
'OpenGL rendering is not available in the current Qt Wayland mode.' + LineEnding +
LineEnding +
'The Lazarus/LCL Qt6 OpenGL control used by EWSDR requires an X11 display handle, ' +
'but the native Wayland backend does not provide one. Using it here can cause an access violation during startup.' +
LineEnding +
LineEnding +
'To run EWSDR with OpenGL rendering, start it through XWayland:' + LineEnding +
'QT_QPA_PLATFORM=xcb ./ewsdr --opengl' + LineEnding +
LineEnding +
'OpenGL rendering will be disabled for this session.',
mtWarning, [mbOK], 0);
FUseOpenGLSpectrum := False;
end;
if FUseOpenGLSpectrum then
FWaterfallFrameInterval := 1;
if FUseOpenGLSpectrum then
+42
View File
@@ -0,0 +1,42 @@
unit PlatformUtils;
{
PlatformUtils.pas - small helpers for desktop/runtime platform checks.
}
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
interface
function QtPlatformAllowsOpenGLControls: Boolean;
implementation
uses
SysUtils;
function QtPlatformAllowsOpenGLControls: Boolean;
var
Qpa, FirstQpa, SessionType: string;
Sep: Integer;
begin
Result := True;
Qpa := LowerCase(Trim(GetEnvironmentVariable('QT_QPA_PLATFORM')));
SessionType := LowerCase(Trim(GetEnvironmentVariable('XDG_SESSION_TYPE')));
if Qpa <> '' then
begin
FirstQpa := Qpa;
Sep := Pos(';', FirstQpa);
if Sep > 0 then
FirstQpa := Copy(FirstQpa, 1, Sep - 1);
Result := FirstQpa <> 'wayland';
Exit;
end;
Result := SessionType <> 'wayland';
end;
end.
+4
View File
@@ -210,6 +210,10 @@
<Filename Value="SpectrumView.pas"/>
<IsPartOfProject Value="True"/>
</Unit>
<Unit>
<Filename Value="PlatformUtils.pas"/>
<IsPartOfProject Value="True"/>
</Unit>
<Unit>
<Filename Value="SpectrumViewOpengl.pas"/>
<IsPartOfProject Value="True"/>