glVertexPointer()
(およびその他の関連する関数)を呼び出すときに、スタック上にある頂点配列を使用するのは安全ですか? OpenGLが渡された構造体から実際にデータをコピーするとき、私にはわかりません。glVertexPointer()はいつデータをコピーしますか?
安全でない場合は、glVertexPointer()
に渡された構造物を破壊/再利用することが安全であることをどのように知っていますか?
(VBOsを使用しない)
glVertexPointer()
(およびその他の関連する関数)を呼び出すときに、スタック上にある頂点配列を使用するのは安全ですか? OpenGLが渡された構造体から実際にデータをコピーするとき、私にはわかりません。glVertexPointer()はいつデータをコピーしますか?
安全でない場合は、glVertexPointer()
に渡された構造物を破壊/再利用することが安全であることをどのように知っていますか?
(VBOsを使用しない)
頂点アレイの場合、ポインタはGL_VERTEX_ARRAY
がglEnableClientState()
EDされていると仮定すると、glDrawElements()
の実行や友人間に逆参照されるであろう。
glDrawElements()
が返ってすぐに、OpenGLには必要なすべてのデータがあるので、free()
に自由にアクセスできます。それは本当に問題ではないので、あなたは、実際のポインタを渡すことはありませんVBOs :)
については
だから、このようなものが動作するはずです:
void draw()
{
vector<float> verts;
verts.push_back(0);
verts.push_back(0);
verts.push_back(0);
verts.push_back(10);
verts.push_back(0);
verts.push_back(0);
verts.push_back(10);
verts.push_back(10);
verts.push_back(0);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, &verts[0]);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableClientState(GL_VERTEX_ARRAY);
}
glVertexPointer決してコピーデータを、それだけでAセットポインターは、glDrawArraysとglDrawElementsを呼び出したときに読み取られ、GPUに転送されます。これらの関数が返された後、データは解放されても安全です。
間違っている! drawコマンドを発行した後ではなく、glBufferDataの後にデータを解放することができます。誤解を招く人々を止める。 – spectre
@ lukasz1985彼はVBOを使用していないと言っているので、コメントは適用されません。 –
正しい答えを得るには、VBOを使用している場合は追加する必要があります。 – pmr