2011-11-08 25 views
9

可能性の重複:ウェブ上の一部のページを読んで
OpenGL 4.1 vs 3.1+OpenGL 3.xと4.Xの違いは?

、私はOpneGLの両方のバージョンのためにリストされている同じコード例を見つけました。私は2つのプログラム可能な機能のパイプラインを使用して、以前のバージョンとは異なり、知っているが、2つの間の主な違いは何ですか?なぜあなたはもう一方を使いますか?

答えて

36

OpenGLのメジャーバージョン番号は、実質的にD3Dのメジャーバージョン番号などのハードウェアレベルを表します。 GL 2.xはDX9ハードウェアを表します。 GL 3.xはDX10クラスのハードウェアを表します。したがって、GL 4.xはDX11クラスのハードウェアを表します。

ただし、GL 4.xで導入された機能はすべてハードウェア固有のものではありません。 APIの便利さとクリーンアップ機能があります。これらは、下位レベルのハードウェアへの拡張機能として利用でき、NVIDIAやAMDのドライバが提供しています。これらの中で最大のものはprogram separationで、これはGLSLがの長さである時間に必要なものです。

3.xで利用できないGL 4.xの実際のハードウェア機能に関しては、巨大でもゲームの変更もありません。それは確かに重要ですが、地球の動きはありません。 OpenGL Wikiのバージョン別にGL機能の詳細を見ることができます。

Image load/storeatomic countersはおそらく最大のものです(これにはshader storage buffersも含まれます)が、同時に最も広告されていません。シェーダはイメージとバッファから直接書き込み/読み出しを行いますが、これについてはa lot of caveats and synchronization issues to understandがあります。

GL 4.3が追加されました。上記と組み合わせると、OpenCL/OpenGL interopの苦痛なしに計算タスクを実行できます。

最も話題になる機能はtessellationです。これは、プリミティブをどれだけテッセレーションするかを決定するシェーダステージと、テッセレーションされたプリミティブから新しい値を生成する方法を決定するシェーダステージの追加のペアを導入します。

Subroutinesは面白いですが、よく見落とされる機能です。基本的には、ユニフォームのようなシェイダープログラムにサブルーチンを付けることができます。したがって、ライティング機能を実行するのと同じ基本プログラムを使用できますが、プログラムを変更せずにライティング機能をスワップすることができます。基本的なプログラムは、テクスチャをフェッチし、拡散/スペキュラ/その他のマテリアルパラメータが何であるか把握し、ノーマルパラメータとライティングパラメータを決定し、サブルーチンに渡します。クイックでシンプルなLambertian拡散からCook-Torranceまで(あなたはもっと重要なパラメータが必要ですが)、様々な照明サブルーチンを用意することができます。

+2

この回答は+ 5 ^^以上の価値があります。ナビゲーションがとてもそうであっても、あなたのOpenGLの本は本当に素晴らしいです。 – Korchkidu

+0

@Korchkidu:どの本? – ssc

+0

内部の変更は別として、実際に違いを見ることができますか?たとえば、私がゲームや3Dデモをよく見ると、それらの変更はより良いものをもたらすでしょうか? – ssc

関連する問題