OpenGLのカバレッジについて疑問がある場合は、Steam Hardware Surveyから始めるのが良いでしょう。
http://store.steampowered.com/hwsurvey?platform=pc
残念ながら、現在壊れているようで、ビデオカードの統計情報は表示されません。:\
また、XPが特定のバージョンまでしかサポートしていないなどのことも読みました
DirectX 9は、OpenGL 2.1、DirectX 10からOpenGL 3.0、DirectX 11からOpenGL 4.0に相当します。これが混乱の原因です。
XPはOpenGLのすべてのバージョンをサポートしていますが、DirectX 10以降はサポートしていません。これは、Microsoftが人々にVistaへのアップグレードを強制したかった方法ですが、あまりうまくいきませんでした。OpenGLはオープンスタンダードであるため、ビデオカードメーカーがXP用のドライバーを作成する限り、OpenGLの新しいバージョンをサポートします。
私が理解していることから、3.xはまったく新しい方法を開始し、「glBegin()、glEnd()などの非推奨の機能から遠ざけたい」というさまざまな記事やレビューを読んでいますが、私が見たチュートリアルでは、この方法を使用しています。基本的に、新しいやり方はもっと複雑であるが、古いやり方は悪いと言っている人々を見てきました>。>
これはOpenGLにとって非常に大きな問題です。基本的に、昔は、「即時モード」を使用してビデオカードにデータを送信していました。皮切りにglBegin
、いくつかの処理を行い、で終わりglEnd
ます。ただし、ビデオカードドライバーはこれをまったく好みません。彼らは、あなたがどれだけの物を送るかをどのようにして知ることができますか?テクスチャ付きクワッドでは4つの頂点になりますか、スキンモデルでは100,000になりますか?これが、頂点バッファオブジェクト(VBO)を導入した理由です。即時モードはリンクリストですが、VBOは静的配列です。開発者はそれがどれだけ大きいかを知っており、ドライバーはそれがどれくらい大きいかを知っています。みんな幸せです。そのため、OpenGL標準ボード(Khronos Group)は、OpenGL 3.0以降の即時モードを廃止することを決定しました。ただし、簡単な例で示しますので、これには問題があります。
ゼロから始めて、テクスチャ付きのクワッドを表示するとします。
OpenGL 2.1の場合:
- 射影行列を設定して配置する
GL_PROJECTION
ます。
- modelviewマトリックスをセットアップして、それを配置します
GL_MODELVIEW
ます。
- 画像を読み込んで
GL_TEXTURE_2D
ハンドルにます。
- 頂点の位置、テクスチャ座標、色を定義します。
- テクスチャをバインドします。
glBegin
... glVertex2f
... glTexCoord2f
... glEnd
。
OpenGL 3.0の場合:
- 投影とモデルビューのマトリックスを作成します。
- 画像を読み込んで
GL_TEXTURE_2D
ハンドルにます。
- 頂点の位置、テクスチャ座標、色を定義し、VBOに配置します。
- 頂点配列オブジェクト(VAO)を作成し、VBOをアタッチします。
- テクスチャ付きクワッドを出力するシェーダーを作成し、シェーダープログラムに配置します。
- ユニフォームを使用して、マトリックスをシェーダープログラムにアタッチします。
- テクスチャをバインドします。
- テクスチャをシェーダープログラムにアタッチします。
glDrawArrays
。
では、最初のバージョンで何がうまくいかないのでしょうか?
- あなたの位置が間違っています。
- 頂点ワインディングは間違った方法です。
- テクスチャが正しく読み込まれません。
- テクスチャが適切にバインドされていません。
- 射影行列が間違っています。
- モデルビューのマトリックスが間違っています。
- 適切な頂点を送信していません。
そして、2番目のバージョンでは、上記の問題が発生する可能性があります。
- VBOが間違っています。
- VAOが間違っています。
- シェーダーが間違っています。
- シェーダーへのテクスチャバインディングが間違っています。
適切なデバッグツールがなければ、これは深刻な問題になります。これは、人々があなたが即時モードに固執するべきだと言う理由です。幸いなことに、今では無料で優れたgDEBuggerが手に入りましたが、魔法の弾丸ではありません。
あなたの質問に答えるために:それはあなたのゲームに依存します。幅広いユーザー(カジュアルゲームや2Dプラットフォーマーなど)にリーチしたい場合は、2.1をターゲットにする必要があります。とにかく6年前のハードウェアでは実行できない壮大な宇宙ゲームを作成している場合は、3.3をターゲットにします。将来の互換性のために最新かつ最高のものが必要な場合は、4.0をターゲットにします。