OpenGLを3.0から3.1にアップデート

OpenGLを3.0から3.1にアップデート

OpenGLのバージョンを3.0から3.1にアップグレードする必要があります。 Stackexchangeには特定の状況を扱うポストがあふれていますが、森の中の木を見るのはどころか年を計るのも難しいことがわかりました。

それで、ケースバイケースで別の質問をしたいと思う状況に基づいて、次のような情報を集めました。問題は

  1. アップグレードは可能ですか?
  2. これを行うには、どのような措置を講じる必要がありますか? (最大限具体的に記載してください)

詳細は次のとおりです。

  • オペレーティングシステム:Ubuntu 14.04 LTS
  • カーネルuname -vr: 4.4.0-96-generic #119~14.04.1-Ubuntu SMP Wed Sep 13 08:40:48 UTC 2017
  • デバイス、ソースlshw -c video:VGA互換コントローラGT218 [GeForce 210] NVIDIA --- OpenGL 3.1をサポートします。サプライヤー仕様
  • ドライバーのソースlshw -c video: nouveau
  • 新鮮な空気情報は以下から提供されます。dpkg -l | grep nouveau

    ii libdrm-nouveau2:amd64 2.4.67-1ubuntu0.14.04.2 amd64 [...] ii libdrm-nouveau2:i386 2.4.67-1ubuntu0.14.04.2 i386 [...] ii xserver-xorg-video-nouveau-lts-xenial 1:1.0.12-1build2~trusty1 amd64 [...]

  • OpenGLについてglxinfo | grep OpenGL

    OpenGL vendor string: nouveau OpenGL renderer string: Gallium 0.4 on NVA8 OpenGL core profile version string: 3.3 (Core Profile) Mesa 11.2.0 OpenGL core profile shading language version string: 3.30 OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL core profile extensions: OpenGL version string: 3.0 Mesa 11.2.0 OpenGL shading language version string: 1.30 OpenGL context flags: (none) OpenGL extensions:

リクエストするとより多くの情報を入手できます。たとえば、シナプティックには、「mesa」というクエリに応答してインストールされた28のパッケージが一覧表示されますが、どのパッケージが関連しているかはわかりません。

ベストアンサー1

結論:適用おそらくクセなし。

OpenGL core profile version string: 3.3 (Core Profile) Mesa 11.2.0

これは、Mesa 11.2がインストールされ、サポートされている最高のOpenGLバージョンが3.3であることを意味します。

しかし、なぜアプリで違うことを言うのですか? OpenGLバージョンを照会する最も一般的な方法はを呼び出すことでした。glGetString(GL_VERSION)これがアプリケーションで使用された方法です。

これを使うことを証明しますか?環境MESA_GL_VERSION_OVERRIDE変数は、報告されたバージョンをユーザーが設定したバージョンに変更します。3.1アプリケーションが文句を言わないように設定します。

これで、すべてのOpenGL機能と同様にglGetStringOpenGLコンテキストを有効にする必要があります。しかし、その後OpenGL 3.2 リリース、OpenGLコンテキストを生成するには宣言する必要があります。前進希望のバージョン。これにより、プログラムが以前のバージョン(*)を使用しているときに最新バージョンとの互換性を得ることができます。

興味深い事実:報告されるバージョンは、glGetStringコンテキストの作成時に選択したバージョンによって異なります。これは、正しく実装されていない古いアプリケーションがプロファイルを明示的に選択せず、必要なバージョンがサポートされているトップバージョンであると信じる結果につながります。アプリケーションがバージョンを選択しない場合、以前のバージョンとの互換性コンテキストが自動的に生成されます。私の考えでは、この行は次のとおりです。

OpenGL version string: 3.0 Mesa 11.2.0

これが実際の問題の場合、アップグレードしても何も変わりません。しかし、このトリックを維持することができますMESA_GL_VERSION_OVERRIDE=3.1。 3.1設定ファイルをロードして修正を待っている間、プログラムは満足のいく状態を維持する必要があります。


(*) 構成ファイル関連。 OpenGL 3.2の新機能により、OpenGL機能セットは、プログラムがOpenGLバージョンを要求し、OpenGL実装がそのバージョンに「ダウングレード」できるようにすることによって実行時に選択できます。これはバージョン3.2以降で動作し、残りの問題はすべての以前の項目をどのように処理するかです。特にOpenGL3がAPIで大幅に改善された場合(glBegin / gVectorとエントリが消えています)。 APIをコアプロファイルと互換性プロファイルに分割することを選択します。互換性コンテキストは古くて未使用の呼び出しを維持しますが、コアコンテキストはそれを削除します。

ただし、互換性コンテキストのサポートは完全にオプションであり、ほとんどのベンダーはスプリットポイント(3.0から3.2へ)とほぼ一致する互換性コンテキストを提供しますが、最新バージョンの互換性コンテキストを作成することを気にする人はほとんどいません。 @Ruslanが彼の答えで提案したものは次のとおりです。 MesaはOpengGL 3.0の互換性プロファイルのみをサポートしますが、nVidiaはより高いバージョンもサポートします。これにより、プログラムを欺くことなくプログラムを幸せに保つことができます。

おすすめ記事