OpenGLの頂点配列のドキュメントを見ると、私が見つけたインデックスに使用される最も一般的なメモリタイプの2つはGLubyte(GL_UNSIGNED_BYTE)とGLshort(GL_SHORT)でした。インデックスGLubyteとインデックスのGLshort
おかげで、
DragonwrennOpenGLの頂点配列のドキュメントを見ると、私が見つけたインデックスに使用される最も一般的なメモリタイプの2つはGLubyte(GL_UNSIGNED_BYTE)とGLshort(GL_SHORT)でした。インデックスGLubyteとインデックスのGLshort
おかげで、
DragonwrennGL_UNSIGNED_BYTE
は、256個以下の頂点を持つモデルでは問題ありません。
GL_UNSIGNED_SHORT
は、2バイトを取ると65536頂点に制限されますが、これはほとんどありません。
最も一般的なバリアントはGL_UNSIGNED_INT
です。中間のポリおよびハイポリモデルでは2バイトでさえ十分でない可能性があります。
しばしば16ビットで十分であり、可能な場合はほとんどのエンジンがそのフォーマットを使用します。通常、頂点の約2倍の三角形がありますので、16ビットで約120.000トリスになります。 1つの単一のメッシュにはかなりのものがあります。 –
GL_UNSIGNED_BYTEが1バイトであるために2つを使用しての間の任意の実際の差があった場合 私は思っていた、GL_SHORTは2バイトです。バイトの唯一の利点は、格納するメモリが少なくて済み、グラフィックスメモリに転送する時間が短いことです(頂点配列またはVBOを前提としています)。
すべての型で使用できるわけではないことに注意してください。例えば、GL_UNSIGNED_BYTEの頂点を持つことはできません。
GPUは16ビットまたは32ビットのインデックスのみを処理できるため、GL_UNSIGNED_BYTEを使用してメモリを節約しないと、追加のオーバーヘッドが発生します。
短くてもバイトより少ないメモリが必要ですか?私はOpenGLを知らないが、通常はそれは逆の方法である(おそらく2バイトである)。 – Thilo
@Thilo:すべての正直なところ、ドライバはほとんどのデスクトップGPUで8ビットのインデックスを16ビットに変換する必要があるため、おそらく同じ量のメモリを使用します。 OpenGL APIは、8ビットのインデックスが実行可能なオプションであるように見せますが、ハードウェアの背後では、それらが好きではありません。 OpenGLはこの種のことを悲しいことにしています... OpenGLドライバはたくさんの煙や鏡です。 –