純粋なOpenGLまたはGLSLに移行しますか?[閉まっている]


11

私はグラフィックプログラミングの勉強に興味を持ったので、明らかな入り口はOpenGLを学ぶことでした。しかし、フォーラムやサイトの周りに散在する情報を集めると、3.0より前のほとんどのものが非推奨になり、「3.0以降はすべてシェーダーに関するものである」というAmazonのレビューを引用しているため、純粋なOpenGLの実装は消えています。また、私が見た本の中で、新しいバージョンをカバーしているのは優れたものだけのようですが、本の大部分が非推奨の機能を教えており、GLSLに特化した本があるためです。

これが私が最初の問題に遭遇した場所です。使用する予定のIntel統合グラフィックスを備えたノートブックを含め、一部のハードウェアはGLSLをサポートしていません。関数

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

セグメンテーション違反を引き起こし、その外観から私のドライバーはシェーダーをサポートしていません

だから私の質問は、OpenGLだけでゲームを作ることの実行可能性は何ですか?シェーダー言語からのかけがえのない優れた機能はありませんか?また、シェーダーを使用してゲームを適切に実行するには、どのようなハードウェア(旧世代のi3、i5、i7、旧VGA)が必要ですか?


1
GLSL OpenGLです。あなたの質問は、使用するハードウェアがOpenGL 3互換かどうか、特にGLSL互換かどうかに関係していると思います。
deceleratedcaviar

@Danielでは、ハードウェア/ドライバーがOpenGL 3.0互換である場合、GLSL互換ですか?
ibrabeicker 2011

1
GLSLはOpenGL 3.0仕様の一部であるため、そうです。
deceleratedcaviar

1
「見たところ、私のドライバーはシェーダーをサポートしていません。」OpenGLのどのバージョンを取得していますか?使用可能なすべてのOpenGL関数を正しくロードしていますか?
Nicol Bolas、2011

1
@Papavoikos:NULLを返す場合、シェーダーを使用するかどうかよりもはるかに大きな問題があります。OpenGLコンテキストを正しく作成していますか?覚えておいてください。有効なコンテキストを作成して最新のものにするまで、GL関数を呼び出すことはできません。
Nicol Bolas、

回答:


9

シェーダーコードは、glTexEnv、glTexGen、およびテクスチャマトリックス呼び出しの混乱よりも明確で理解しやすく、それを使用して多かれ少なかれ任意の数学演算を表現できるというボーナスがあります(これは修正済みの関数では実行できません)。パイプライン-いわゆる「純粋なOpenGL」)。唯一の潜在的な欠点は、コードを使用する前に、ある程度のサポートインフラストラクチャをコードに記述する必要があることです。これに対して、古い方法では、ほとんどの場合、すぐに飛び込むことができます。実際に準備をして少し前に学ぶことができると思います。OpenGLは「簡単」であるとの評判があり、時々、人々がこれにだまされて、最初に何をしているのかを本当に知らずに飛び込んでいるのを見かけることがあります。

ハードウェアに関しては、過去5/6/7年間にリリースされたほぼすべてのものに依存して、ある程度のシェーダーをサポートできます。ただし、古いIntel(一部の9xxシリーズ)の場合は、GLSLにはなりません。しかし、代わりに古いGL_ARB_vertex_programおよびGL_ARB_fragment_program拡張機能になります。これらはアセンブリ言語のようなシェーダー言語を使用しますが、-告白時間-私は個人的にそれが好きです。より新しい機能(分岐など)がなく、同じことを実行するためにシェーダーコードの行数を増やす必要がある場合は、実際には非常に使いやすいです。メインプログラムでこれらの拡張機能に必要なサポートインフラストラクチャは、GLSLよりもはるかに軽量です。

ただし、GLSLではなく推奨するというわけではありませんが、このクラスのハードウェアで実際に実行する必要がある場合に使用できるオプションであり、それらが存在することを認識しておくと便利です。 。このクラスのハードウェアで実行する必要があることを本当に確信していますか(たとえば、ノートブックの場合、エントリポイントの取得を怠った可能性があります)。


Mesa3dがまだopengl 2.1仕様にあるという事実を完全に無視しました。私はそれを修正します
ibrabeicker

6

また、「純粋なOpenGL」はもう存在しないことにも注意してください。

OpenGL ES 2.0はシェーダー以外のものをすべて取り除き、WebGLはそれに基づいているため、シェーダーでのみ機能します。OpenGL 3.0はすべての固定機能を非推奨にし、3.1はそれを削除しました(コアプロファイル内。ほとんどの実装は互換性プロファイルをサポートしていますが、MacOSXは3.2実装をサポートしていません)。

したがって、シェーダー以外のOpenGLを学習することはお勧めしません。


6

過去にプログラミングを行ったことがある場合は、GLSLを使用して独自のシェーダーコードを作成するほうがはるかに楽しいでしょう。私はもともと固定機能のOpenGLを学習しようとしましたが、意味がわからなかったので私には困難でした。それから私はオレンジ色の本を使ってGLSLを学ぼうとしました、そしてそれはずっと簡単で、それ以来もっと作られました。ちょうど私の2セント。

GPU用のプログラムを書く力があるので、私は間違いなくGLSLに向かっていきます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.