2016-03-31 5 views
3

In QML-Anwendungen there are 3 rendering types:Prüfen Sie, welche OpenGL-Engine von Qt zur Laufzeit für die Freigabe verwendet wird, baut

  • india OpenGL: "Desktop"
  • ANGLE Direct3D: "Winkel"
  • Ein Software-Renderer: " Software "

Wir verwenden den automatischen Lademechanismus des unterstützten Typs.

Wie kann ich programmgesteuert bestimmen, welcher Rendering-Typ zur Laufzeit verwendet wird?

Ich weiß von QT_LOGGING_RULES=qt.qpa.gl=true, aber das produziert eine Menge Lärm und DEBUG-Nachrichten, die nicht in unserem Release-Build protokolliert werden. Gibt es noch eine andere einfache Möglichkeit, den Rendering-Typ zu erhalten?

+0

Mit "Software" meinen Sie durch einen Software-OpenGL-Renderer wie Mesa's llvmpipe oder den 2D-Renderer von Qt Quick? – peppe

+0

@peppe Mesa's llvmpipe über die ausgelieferte opengl32sw.dll –

+1

Dann können Sie einfach 'GL_VENDOR',' GL_VERSION' etc. überprüfen? Sie erhalten WINKEL, Mesa usw. – peppe

Antwort

3

Verstanden dank @peppe und einige zusätzliche Forschung:

// this connection must be established before show() is called 
QObject::connect(window, &QQuickWindow::sceneGraphInitialized, 
       [=]() -> void { 
    auto context = window->openglContext(); 
    auto functions = context->functions(); 
    const std::string vendor = reinterpret_cast<const char*>(functions->glGetString(GL_VENDOR)); 
    const std::string renderer = reinterpret_cast<const char*>(functions->glGetString(GL_RENDERER)); 
    const std::string version = reinterpret_cast<const char*>(functions->glGetString(GL_VERSION)); 
    qDebug() << "OpenGL vendor: " << vendor << " " 
      << "renderer: " << renderer << " " 
      << "version: " << version; 
}); 

wo window * mein Haupt QQuickWindow ist.

Verwandte Themen