1

頂点属性の配列がありますGLfloat *vxData。とwithの両方GL_ARRAY_BUFFERと正しいインデックスデータをバインドしましたが、最初の頂点は正常にレンダリングされます。GL_ELEMENT_ARRAY_BUFFERvxData

各レンダリングステップで、次のことを行います。

glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);
glBufferData(GL_ARRAY_BUFFER, vxDataSize, vxData, GL_STATIC_DRAW);
glDrawElements(...)

ある段階で、vxData頂点の数を減らしたり増やしたりするためにサイズを変更し、これを反映するようにインデックスデータを再作成して、vxDataSize更新します。このデータの変更の直後のレンダリングでは、上記の同じ行を単に呼び出すのは正しいですか?

私は別の可能性を知っています。たとえばglMapBufferOES、を使用して、上記がこのシナリオに対して技術的に正しいかどうかを知りたいだけです。

4

1 に答える 1

5

それが正しいか?はい、あなたはそれを行うことができ、あなたはそれが期待するものをレンダリングする関数型コードを取得する必要があります。いいですか?

いいえ。

まず、あなたはOpenGLの実装に嘘をついています。STATICデータを作成しているとおっしゃいました。STATICは、一度アップロードすることを意味します。フレームごとにそれを行う場合は、STATICではなくSTREAMを使用する必要があります。

第二に、バッファをどんどん大きくしてはいけません。古いデータをフラッシュすることは1つのことですが、OpenGLにバッファを大きくする必要があることを伝えている場合は、実際にメモリを割り当てる必要があります。それは良いことではありません。サイズを選び、それに固執します。使用が期待できる最大のサイズを選び、そこにとどまります。

于 2011-09-04T20:06:52.473 に答える