16

OpenGL 4と3、特に3.1と4.1はかなり似ていることを理解しています。両方が本質的に一緒にリリースされているため、OpenGL 4.0/4.1の理論的根拠を理解するのは難しい場合があります。

OpenGLの以前のリリースでは、マイナーバージョンは、大幅な変更が新しいメジャーバージョンに蓄積されるまで上向きに増加します。OpenGL 3.xおよび4.xは下位互換性のないAPIの変更を導入し、OpenGL 3.2および3.3は、3.1が4.1+と互換性があるのに対し、上位互換性がない3シリーズのブラン​​チであると言われています。

OpenGL 4.1は、新しいメジャーバージョンに分類されることを保証するOpenGL 3.1と比較して、どのような主な違いがありますか?

ボーナス:GL3やアクセシビリティだけでなく、どのような状況でもパフォーマンスが向上する違いはありますか?

編集:回答に基づくいくつかの追加の調査結果


OpenGL 3.3は、OpenGL 4.0を補完して、古いハードウェアに可能な限り多くの機能を組み込むために作成されました。OpenGL 3と4、3.3のどちらかを選択する方が良い場合もあります。4.1では、GL ES 2.0との互換性と、いくつかの優れた機能が追加されています。


ワークフローの大きな違いの1つは、新しいテッセレーションシェーダーを介してパイプラインにGPUプログラミングステップが追加されることです。もう1つは、レンダリングする複数のビューポートです。新しいレベルの詳細機能は、私が使用しているワークフローを変更し、おそらく他のワークフローもかなり変更すると思いますが、この機能については詳しく調べていません。

誤解や改善すべき点があれば教えてください。

基調講演(メタを尋ねている間、明らかに回答から削除されました。実際の回答が何であったかを一時的に参照するためです。)

付録G- KOpenGL4.1機能からOpenGL4.1 機能まで

OpenGL4.0のKhronosGroupリリースは「読みやすい」かもしれません:)

  • サンプラーオブジェクト
  • インスタンス化された配列とシェーダー
  • texture_cube_map_arrayおよびtexture_gather

  • GLSL4.0動的LOD

  • shader_subroutineおよびsample_shading
  • セパレートシェーダーオブジェクト
  • テクスチャ/レンダーバッファに必要なサイズを増やします
  • 64ビット浮動小数点頂点属性
  • get_program_binary
  • +2テッセレーションシェーダー
4

1 に答える 1

12

あなたの質問が「4.1 でどのようにワークフローを改善できるか」である場合、それは単純に 4.1 の目的ではありません。

まず、同じことを話していることを確認するための簡単な定義です。私にとって「ワークフロー」とは、API の改善やパフォーマンスを向上させるものを意味します。これらは、ハードウェアが以前にできなかったことをすることを許可しません。プログラマーにとって作業が簡単になったり、パフォーマンスが向上したりするだけです。

API の改善の大部分 (新機能に基づくものではないもの) は、コア拡張機能として 3.3 実装で利用できます。これらはコア拡張であるため、コードを変更して 3.3 コードから「ARB」サフィックスを削除し、4.1 コードで使用する必要さえありません。それはすべてうまくいきます。特に、プログラムの分離 (GL_ARB_separate_program_objects) とコンパイル済みプログラムのバイナリの取得 (GL_ARB_get_program_binary) について話しています。どちらも 3.3 ハードウェアでサポートされています。NVIDIA はこれらを GeForce 6xxx チップまで拡張しています。

これに対する主な例外は、4.x ハードウェアに限定されているシェーダー サブルーチンです。しかし、この仕様は非常に不十分に指定されているため、誰でも使用できるかどうか、ましてや使用する必要があるかどうかさえわかりません。ややこしくてややこしいです。

4.1 に固有のパフォーマンスを向上させるために簡単に使用できるものはあまりありません。バインドレス レンダリング (GL_NV_vertex_buffer_unified_memory) は、それがボトルネックである場合、おそらく最大のパフォーマンス強化です。名前からお気づきかもしれませんが、これは NVIDIA の拡張機能であり、コアではありません。ARB は、将来の仕様のコア機能のために、これとまったく異なるものではない何かに取り組んでいると確信しています。また、Bindless は 4.x ハードウェアに固有のものではありません。繰り返しになりますが、NVIDIA はこれを GeForce 6xxx チップまで拡張しています。

4.x にはハードウェアを強化できるものもいくつかありますが、それらは最終的に何らかの形式の GPGPU 作業を中心に展開します。OpenCL からレンダリング データを生成している場合は、間接レンダリング (GL_ARB_draw_indirect) を使用すると高速になります。また、Civilization V は、GPGPU テクノロジ (DXCompute を使用しますが、OpenCL でも可能です) を使用してテクスチャを解凍することの価値をすでに示しています。これは、ディスクからそれほど多くのデータをロードする必要がないため、ロードのパフォーマンスに非常に役立ちます。

パフォーマンス向上の定義をさらに広げたい場合は、テッセレーションをパフォーマンス向上と見なすことができます。これを使用して小さいメッシュを送信したり、LOD の低いメッシュをカメラの近くで使用したりできます。または、これまでよりも高いポリゴン メッシュをレンダリングする方法と考えることができます。

4.x は、物事を高速化するハードウェア機能を提供することを目的としていません。それは、以前とは異なる方法でレンダリングできるようになることです。

もう 1 つ: 3.1 と 3.3 のどちらかを選択することはできません。3.1 を実行できるほとんどすべてのハードウェアで 3.3 を実行できます。そうでない場合、それはハードウェア メーカーが OpenGL ドライバーの開発を怠っているからです (Intel のことを考えています)。

于 2011-06-14T01:04:43.197 に答える