Opbygger Qt med opengl=vinkelreparationsstøtte til Windows-klienter, der ikke har opengl 2.0-understøttelse?

Indlæg af Hanne Mølgaard Plasc

Problem



Vi bygger en klient ved hjælp af QtWebEngine fra Python-bindinger. Desværre crashes denne klient på nogle Windows-systemer, der ikke har native OpenGL 2.0-support (se fejlfinding nedenfor).
Skal det fungere, hvis jeg klarer at kompilere qt på windows med åbenvinkel=vinkel eller er dette en død vej?


Jeg har allerede brugt en hel dag i at forsøge at tvinge qt fra kilde på windows ved hjælp af msys2/mingw64, men falder fra en fælde til en anden uden succes og vil gerne sørge for at indsatsen har en chance for succes ...


Tak!


P.S .: Jeg er også oprettet i Qt forumet [4]


qt.qpa.gl: Basic wglCreateContext gives version 1.1
qt.qpa.gl: OpenGL version too low
qt.qpa.gl: OpenGL 2.0 entry points not found
qt.qpa.gl: GPU features: QSet("disable\_d3d11", "disable\_d3d9", "disable\_desktopgl")
qt.qpa.gl: Disabling Desktop GL:  GpuDescription(vendorId=0x0, deviceId=0x0, subSysId=0x0, revision=0, driver: "vm3dum64.dll", version=7.14.1.1233, "R
DPDD Chained DD")
qt.qpa.gl: Disabling D3D11:  GpuDescription(vendorId=0x0, deviceId=0x0, subSysId=0x0, revision=0, driver: "vm3dum64.dll", version=7.14.1.1233, "RDPDD
Chained DD")
qt.qpa.gl: Disabling D3D9:  GpuDescription(vendorId=0x0, deviceId=0x0, subSysId=0x0, revision=0, driver: "vm3dum64.dll", version=7.14.1.1233, "RDPDD C
hained DD")
qt.qpa.gl: QWindowsOpenGLTester::supportedRenderers GpuDescription(vendorId=0x0, deviceId=0x0, subSysId=0x0, revision=0, driver: "vm3dum64.dll", versi
on=7.14.1.1233, "RDPDD Chained DD") renderer:  QFlags(0x8|0x20)
qt.qpa.gl: Qt: Using EGL from libEGL
qt.qpa.gl: Qt: Using OpenGL ES 2.0 from libGLESv2
qt.qpa.gl: QWindowsEGLStaticContext::create Created EGL display 0x3d409b0 v 1 . 4
qt.qpa.gl: QWindowsIntegration::createPlatformOpenGLContext QSurfaceFormat(version 2.0, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSiz
e 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::SwapBe
havior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(NoProfile))
qt.qpa.gl: QWindowsIntegration::createPlatformOpenGLContext QSurfaceFormat(version 2.0, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSiz
e -1, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize -1, samples -1, swapBehavior QSurfaceFormat::Swap
Behavior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(NoProfile))
qt.qpa.gl: QWindowsIntegration::createPlatformOpenGLContext QSurfaceFormat(version 2.0, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSiz
e 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::SwapBe
havior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(NoProfile))
qt.qpa.gl: QWindowsIntegration::createPlatformOpenGLContext QSurfaceFormat(version 2.0, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSiz
e 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::SwapBe
havior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(NoProfile))
qt.qpa.gl: QWindowsIntegration::createPlatformOpenGLContext QSurfaceFormat(version 2.0, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSiz
e 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::SwapBe
havior(DefaultSwapBehavior), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(NoProfile))
QOpenGLShader::link: Failed to create D3D shaders.

Could not link shader program:
 "Failed to create D3D shaders.
"
QOpenGLShader::link: Failed to create D3D shaders.
Failed to create D3D shaders.

Bedste reference


Nej, jeg tror ikke at kompilere Qt fra kilder med ANGLE support hjælper i dit tilfælde. På debug output er det synlige Qt allerede tilbage til ANGLE (libGLESv2):


Qt: Using OpenGL ES 2.0 from libGLESv2


Dette link bekræfter det, forudsat at du kører forudbyggede binære pakker med Qt 5.5 eller nyere: [5]



  Når konfigureret med -opengl dynamisk, hverken Qt eller applikationerne
  bygget ved hjælp af qmake vil linke til opengl32 (standard desktop OpenGL)
  eller libGLESv2 (ANGLE) biblioteker. I stedet er det relevante bibliotek
  valgt i løbetid. Som standard vil Qt bestemme, om systemet 's
  opengl32.dll giver OpenGL 2 funktioner. Hvis disse er til stede,
  opengl32.dll bruges, ellers vil ANGLE biblioteker blive brugt.



Årsagen til sammenbrud synes at være skyggeforbindelse, der knytter sig til fejl i emuleret OpenGL-kode (ANGLE/Direct3D).


QOpenGLShader::link: Failed to create D3D shaders.


Hvorfor sker der så en anden historie. For det første vil jeg opdatere DirectX til en nyeste version.

Andre referencer 1


talamakis kommentar sætte mig i den rigtige retning:



  • PyQt5 understøtter allerede QT 5.8.x mimik ved først at kontrollere native OpenGL-support og end at falde tilbage til ANGLE-emulering på Windows.

  • Uheldigvis giver fejlstablerne ingen antydning af, hvad der mangler på de svigtende systemer. Efter langvarig forskning fandt jeg løsningen for alle de ikke-Windows-systemer: (re) installer [6] DirectX End-User Runtimes (juni 2010). Det ser ud til, Windows 7 mangler nogle DLL'er til at arbejde med ANGLE, som QT forventer ...