一部のコード (2D シェイプのアウトライン用のデータの VBO の構築を処理します。つまり、単なる三角形メッシュではなく、任意の長さのポリゴン アウトラインにすることができます) を、プリミティブ再起動の使用から の使用に変換する必要がありましたglMultiDrawElements。実際には自分のアプリケーションにより適していることに気付きglMultiDrawArraysましたが、それは質問とは関係ありません (実際、私が賢く移植してglMultiDrawArrays代わりに使用していれば、この奇妙な問題に遭遇しなかったでしょう)。
必要な値を格納するためのデータを格納するために、2 つのベクトルを組み立てました。
struct E_MDEGBuffer {
std::vector<GLvoid*> indices;
std::vector<GLsizei> lengths;
};
indices次に、N個の頂点を持つ各ポリゴンに対して と の両方に単一の値をプッシュし、ポリゴンの最初の頂点に対応するIBOのインデックスをどこに挿入しlengths、その中に頂点の整数を配置しました。ポリゴン。indices(char*)NULL+indexindexlengths
構造体は、次のように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]ですか?