一部のコード (2D シェイプのアウトライン用のデータの VBO の構築を処理します。つまり、単なる三角形メッシュではなく、任意の長さのポリゴン アウトラインにすることができます) を、プリミティブ再起動の使用から の使用に変換する必要がありましたglMultiDrawElements
。実際には自分のアプリケーションにより適していることに気付きglMultiDrawArrays
ましたが、それは質問とは関係ありません (実際、私が賢く移植してglMultiDrawArrays
代わりに使用していれば、この奇妙な問題に遭遇しなかったでしょう)。
必要な値を格納するためのデータを格納するために、2 つのベクトルを組み立てました。
struct E_MDEGBuffer {
std::vector<GLvoid*> indices;
std::vector<GLsizei> lengths;
};
indices
次に、N個の頂点を持つ各ポリゴンに対して と の両方に単一の値をプッシュし、ポリゴンの最初の頂点に対応するIBOのインデックスをどこに挿入しlengths
、その中に頂点の整数を配置しました。ポリゴン。indices
(char*)NULL+index
index
lengths
構造体は、次のようにE_MDEGBuffer
値を渡すために使用されます。glMultiDrawElements
glMultiDrawElements(GL_TRIANGLE_FAN, mde.lengths.data(), GL_UNSIGNED_INT, (const GLvoid**)mde.indices.data(), mde.indices.size());
プログラムをテストしたところ、レンダリングが完全に台無しになりました。
最終的に、渡されたハードコーディングされた値を少しいじるglMultiDrawElements
と、インデックス値が 4 倍ずれていることがわかりました。
例として、最初のポリゴンに 3 つの頂点があり、2 番目のポリゴンに 5 つの頂点があるとします。
正しい結果を得るために、私のindices
ベクトルには含まれるもの[0,0xc]
とlengths
含まれるものがあります[3,5]
。
なぜすべきでindices
はないの[0,0x3]
ですか?