2011-09-08 8 views
5

OpenGLの初心者の質問頂点配列の必要寿命:私はこのような何かを行う場合:のOpenGL:

GLfloat vertices[] = { .... }; 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
... set other stuff ... 
glDrawArrays(...); 

は「頂点」配列の必要な寿命は何ですか? (つまり、OpenGLは、関連する部分のコピーをどの時点で取得するのでしょうか?)たとえば、配列が暗黙的にスタックに存在するか、glDrawArraysの後に存在する必要がありますか)は呼ばれていますか? [何が価値がある、私は特にiOS用のプログラミング、およびXcodeでデフォルトで設定として、現時点ではOpenGLのプロジェクトで作成drawFrameメソッド内のコードで働いてください。]

答えて

2

あなたの配列必要がありますglDrawArraysまで生き残り、後で破棄することができ、これが暗示するように、スタックに置くことができます。頂点配列の

1

内容は、glDrawArrays/Elementsを呼び出し、したがって、(あなたはもうglDrawArrays/Elementsを呼び出すかgl...Pointerの呼び出しによって頂点配列を変更しないまで)まだこの時点で存在する必要はありたびにコピーされます。

実際にGPUに頂点(および他の)データを格納し、ドライバがそのメモリを管理できるようにするために(描画呼び出しごとにデータを転送する必要がないというパフォーマンス向上と共に)vertex buffer objectsを使用できます。このようなVBOにデータをコピーすると、GPUメモリ(またはドライバが最適と考える場所)に常駐し、実際にはCPUコピーはもう必要ありません。しかし、これらは単純化されたステートメントで、詳細についてはVBOの資料を参照してください。

+0

Hmm OKはある時点でバッファオブジェクトを調べます。私の最初のOpenGLアプリケーションとして、私は、この段階ではあまりにも出血しているものではなく、パズルアプリのために少数のプリミティブを画面上に表示しようとしていますが、もっと複雑なことをしたときには、 –

+0

@Neilとにかく、ちょっとしたメモとしての意味がありました。それは、ステップバイステップで学ぶことは常に良いです。 –