OpenGL 2以降と3以降:2Dグラフィックの主な違いは何ですか?[閉まっている]


7

OpenGL 3.0の前後のOpenGLコンテキストはかなり異なります。これまでのところ、私はどちらにしても実際にはどちらか一方のバッファでのみ作業してきましたが、最も顕著な違いはイミディエイトモードがないことです。

イミディエイトモードの考慮事項をまとめて捨てる場合、特に2Dグラフィックエンジンで低レベルの2次元操作をコーディングする場合に注意すべき重要な違いは何ですか?


これまでの回答は参考になりましたが、単なるメモです。現時点ではGL3 +の方が本当に快適であり、互換性のために2.1に移植することを考えています。最も重要なのは、実際にはどのバージョンがOpenGL ESと最も互換性があるかです。
Garet Claborn

2
私は...あなたが前の編集をロールバックする理由を見て興味
Vaillancourt

これは、このタイトルがOpenGLコア方法論における特定の大きな変化を参照しているためです。バージョン3より前は、OpenGLアーキテクチャーはOpenGL 1.1および1.0アーキテクチャーと深く結びついていました。これがOpenGLの履歴/方法の重要なポイントである理由は、OpenGLに固有のドメインです。このバージョン以降、後方互換性は97年以来初めて破壊されています。また、最新のハードウェアの標準をより実用的なものにするという点で、主要な分裂です。この質問の意味にとって、アーキテクチャのこの中断を表すことが重要です。
Garet Claborn 2017

回答:


8

具体的には、コンテキストに関してはほとんど違いがありません。ほとんどのOpenGL実装は、OpenGL拡張機能の動作方法により、レガシーコンテキストを使用している場合でも、OpenGL 3.0以降のほとんどの機能を備えています。

OpenGL 3.0のどの機能を使用する価値があるかを具体的に尋ねる場合、最良の機能のいくつかはジオメトリシェーダーとインスタンス化です。これらはどちらも特定の状況での2Dグラフィックスにも役立ちます。ただし、単純な2Dのほとんどの場合、実行するのはフレームごとにストリーミング頂点バッファーをいっぱいにして、1回の描画呼び出しを行うだけなので、追加の操作はほとんどありません。

一般にOpenGLの2Dに関しては、テクスチャアトラス(スプライトシート)があることを確認してください。テクスチャの状態を変更する必要はほとんどありません。スプライトごとに描画呼び出しを行うのは非常に効率が悪いため、避けたいと思います。むしろ、多数のスプライトをバッチ処理して、一度にすべて描画したいのです。ペインターのアルゴリズムでレンダリングします。「レンダー」とは、ジオメトリを頂点バッファーにプッシュし、最後にそれを描画することを意味します。必要に応じて後処理します。


3

ここで多くの情報を見つけることができます:OpenGLレジストリ。拡張機能はたくさんあります。各セクション(ARB、EXT、...)は、追加日に従って順序付けられています。新しい拡張機能は、OpenGLの新しいバージョンに対して作成されます。たとえば、ARBセクションを見ると、ARB_timer_query(含む)の下のほぼすべての拡張機能がOpenGL 3.2以降に対して作成されています。

バッファについても触れたので、拡張機能GL_NV_vertex_buffer_unified_memoryを試すことができます。いくつかの情報はここにあります(プレゼンテーションへのリンクもあります)。

また、シェーダーを使用している場合は、shader_buffer_loadも役立ちますが、仕様はまだ読んでいません。

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