web-dev-qa-db-ja.com

Qt:使用されているOpenGLのバージョンを検出するにはどうすればよいですか?

QtがOpenGLを使用できる方法はいくつかあります。デスクトップ(ネイティブ)、ANGLE、ES ...そして今では実行時に選択できる「動的」があります。アプリ内で、どれが使用されているかを検出する方法はありますか? C++内またはQML内のどちらか?

例えば グローバル宣言 と同等のもので、OSを検出できます

7

OpenGLバージョンを検出するには

特定のOpenGLバージョンを適用したい場合

  • ソフトウェアでオプションを設定します(以下のコード例を参照)
    • デスクトップ/ネイティブの場合、環境変数QT_OPENGLdesktopに設定するか、アプリケーション属性をQt::AA_UseDesktopOpenGLに設定します。
    • aNGLEの場合、環境変数QT_OPENGLangleに設定するか、アプリケーション属性をQt::AA_UseOpenGLESに設定します。
    • ソフトウェアレンダリングの場合、環境変数QT_OPENGLsoftwareに設定するか、アプリケーション属性をQt::AA_UseSoftwareOpenGLに設定します。
  • configureオプションを使用してQtの静的ビルドを作成し、必要なOpenGLの実装を設定します(ただし、 Qtライセンスルール )[.____に注意してください。]
    • デスクトップ/ネイティブの場合は、-opengl desktopを含めます
    • aNGLEの場合、-openglオプションを含めないでください。それがデフォルトだからです
    • qtが最適なオプションを選択できるようにする-opengl dynamicもあります。これはQt5.4で導入されました。このオプションが必要であるが、他の理由で静的ビルドが必要ない場合は、静的ビルドを作成する必要はありません。ビルド済みのバイナリはQt5.5以降このオプションを使用しているためです。
    • Qt for Windows-要件 で探索できる他のバリアントもあります。これはWindows固有のページですが、Qt用のOpenGLの構成に関する情報の多くはここに含まれています。 (おそらく、OpenGLレンダリングの問題のほとんどがWindowsプラットフォームにあるためです!)

コード例

#include <QGuiApplication>
//...

int main(int argc, char *argv[])
{
    // Set the OpenGL type before instantiating the application
    // In this example, we're forcing use of ANGLE.

    // Do either one of the following (not both). They are equivalent.
    qputenv("QT_OPENGL", "angle");
    QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);

    // Now instantiate the app
    QGuiApplication app(argc, argv);
    //...

    return app.exec();
}

(上記のコメントの最初の回答をpeppeに感謝し、ブログリンクのuser12345に感謝)

3