GL_QUADSはOpenGL3.1以降から削除されたので、それを使用せずに多くのクワッドを描画する最も速い方法は何ですか?私はいくつかの異なる方法(以下)を試し、私のマシンの速度でそれらをランク付けしましたが、最速の方法はまだ無駄でエレガントではないように見えるので、もっと良い方法があるかどうか疑問に思いました。これらの各方法では、頂点とテクスチャの座標がインターリーブされたVBOを使用していることに注意してください。これは、ベストプラクティスであると信じているためです(間違っている場合もあります)。また、テクスチャ座標が異なるため、別々のクワッド間で頂点を再利用することはできません。
プリミティブ再起動インデックスを使用するGL_TRIANGLE_STRIPを持つglDrawElements。これにより、インデックス配列は{0、1、2、3、PRI、4、5、6、7、PRI、...}のようになります。これにより、VBOの最初の4つの頂点が取り込まれ、それらが三角形のストリップとして扱われて長方形が作成され、次の4つの頂点が別のストリップとして扱われます。ここでの問題は、インデックス配列がスペースの浪費のように見えることです。以前のバージョンのOpenGLのGL_QUADSの良いところは、4つの頂点ごとにプリミティブを自動的に再起動することです。それでも、これは私が見つけることができる最速の方法です。
ジオメトリシェーダー。長方形ごとに1つの頂点を渡し、シェーダーで4つの頂点の適切な三角ストリップを作成します。これは最も高速でエレガントなようですが、冗長データを渡す場合に比べて、ジオメトリシェーダーはそれほど効率的ではないことを読みました。
GL_TRIANGLESを使用したglDrawArrays。頂点を再利用せずに、すべての三角形を個別に描画します。
glMultiDrawArraysとGL_TRIANGLE_STRIP、「最初の」配列の場合は4のすべての倍数の配列、「count」配列の場合は4の束の配列。これは、ビデオカードに0から始まる最初の4を描画し、次に4から開始する最初の4を描画するように指示します。これが非常に遅い理由は、これらのインデックス配列をVBOに配置できないためだと思います。