web-dev-qa-db-ja.com

Ubuntu 12.04でのHDグラフィック4000上のOpenGLおよびGLSL 3.3

私はその構成を実行しています:

  • Ubuntu 12.04
  • インテルHDグラフィックス4000

glxinfoパラメータを教えてください:

OpenGL renderer string: Mesa X11
OpenGL version string: 2.1 Mesa 8.0.4
OpenGL shading language version string: 1.20
OpenGL extensions:

私の目標は、OpenGL 3.3(およびGLSL 3.3)を実行することでした。開発の問題が簡単な場合、ハードウェアとドライバーに夢中になります。そのため、私の構成でそれを達成する方法を誰かが知っていますか?

18
muxisar

残念ながら現時点では、Intelが提供するオープンソースドライバーしか利用できないため、これは不可能のようです。 Intel Open Source Webサイト のリリースノートで確認できるように、お使いのバージョン(Mesa 9.0.1)より新しいバージョンがありますが、OpenGL 3.0とGLSL 1.30は引き続きサポートされています。

問題は、オープンソースドライバーがMesaで動かなくなっていることです。現時点では、GLSL 1.40のみをサポートしています。これは、 http://www.mesa3d.org/shading.html#support

OpenGL 3.3環境を使用する必要がある場合は、バイナリドライバー(nvidiaまたはATIカード)を備えた専用GPUを入手する必要があると思います。

1
musicamante

素晴らしいニュース!!!

Mesa 10がリリースされました。これは、Opengl 3.3およびGLSL 3.3のサポートを意味します!

これは、HD 4400グラフィックチップセットを搭載した第4世代Core i5モバイルプロセッサでテストされています。

Linuxの統合Intelチップセットで最新のOpenGL開発が可能になりました!これは大きな前進です。 Note that ubuntu 15.04 ship with Mesa 10.5

これが、GLSL 3.3シェーダーを使用して三角形をレンダリングする方法です:)

glsl 3.3 shader

わかりましたので、Ubuntu 13.10でこれを機能させるための実験的なドライバーを入手するには、いくつかのことを行う必要があります。

# Note this will take awhile!
1.) Add the PPA Repository
  $ Sudo add-apt-repository ppa:oibaf/graphics-drivers
2.) Update sources
  $ Sudo apt-get update
3.) Dist-upgrade (rebuilds many packages)
  $ Sudo apt-get dist-upgrade
4.) Reboot!

In your code make sure you request a Opengl 3.3 context!

このコマンドを実行しますglxinfo | grep OpenGL次のようなものが得られます...

OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile 
OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.1.0-devel (git-f9cfe5c     saucy-oibaf-ppa)
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile

出典記事

http://www.phoronix.com/scan.php?page=news_item&px=MTQ5OTk

https://launchpad.net/~oibaf/+archive/graphics-drivers/

30
Ben DeMott

だから私はこれを取り巻くスレッドをたくさん見ました、そして私はここが応答するのに良い場所だと思いました。私はIntel ivybridgeでUbuntu 15.04を実行しています。 「Linux用Intel Graphicsインストーラー」アプリケーションを使用した後、glxinfoはopenGlに関する次の情報を提供します。

_OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.6.0
OpenGL core profile shading language version string: 3.30
OpenGL version string: 3.0 Mesa 10.6.0
OpenGL shading language version string: 1.30
_

これから、coreプロファイルとglslバージョンが3.3であることがわかりますが、互換性のあるopenGlは3.0のみなので、コードを3.3で実行する場合openglコアプロファイルとglslコアプロファイルの両方を指定する必要があります。次の手順は、freeglutとglewを使用している場合に機能します。

  • glsl #versionは、コアプロファイルが必要であることを指定する必要があります。

_#version 330 core_

  • opengl 3.3を指定します。

glutInitContextVersion (3, 3);

  • 最後にglewInit()の前にglewExperimentalをtrueに設定します。

_glewExperimental = GL_TRUE;_

編集:

Freeglutを使用しているほとんどの* nixユーザーに関連すると思われる、私が言及するのを忘れていたものは、深さテスト、つまり特定の観点からメッシュの何を描画するべきか(そして何を描画してはいけないか)に関するものです。

Linuxで深度テストを使用するには、深度テストを有効にするだけでなく、

_(glEnable(GL_DEPTH_TEST);_

ただし、深度バッファーを作成するためにglutコンテキストを作成する必要もあります(Windowsは通常デフォルトで深度バッファーを持っているようですが、Linuxにはありません)。

Freeglutを使用することは、_GLUT_DEPTH_を glutInitDisplayMode に含める必要があることを意味し、深度バッファを持つコンテキストを作成します。

glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);

p.s。私が取ったカレッジモジュールがそれを使用して実行するためのデモコードを提供してくれたため、私はfreeglutのみを使用しています。それ以来、代わりに glfw に切り替えることをお勧めします。私の答えの最初の部分はまだほとんど適用されていますが、代わりにglfwメソッドを使用しています。

5
lecker909