2011-09-08 71 views
5

OpenGL的新手問題所需的壽命:如果我做這樣的事情:OpenGL的:頂點數組

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

什麼是需要的「頂點」陣列的壽命是多少? (或者換句話說,OpenGL會獲取相關部分的一個副本以及在哪一點?)例如,數組是否可以駐留在堆棧上,因爲它隱含地是或者需要在glDrawArrays之後存在( ) 叫做?

[對於它的價值,我專門iOS編程,而且目前在爲XCode中的默認設置就一個OpenGL項目創建的並條機方法內的代碼工作]

回答

2

你的數組必須活着直到glDrawArrays,它可以在之後被銷燬,並且如此暗示,它可以駐留在堆棧上。

1

頂點數組的內容將在每次調用glDrawArrays/Elements,所以一定要在這一點上還存在着時間(直到你不叫glDrawArrays/Elements了或呼叫改變頂點數組gl...Pointer)時被複制。

要在GPU上實際存儲頂點(和其他)數據並讓驅動程序管理其內存(以及不需要在每次繪圖調用中傳輸數據的性能改進),可以使用vertex buffer objects。一旦將數據複製到這樣的VBO中,它就駐留在GPU內存中(或者驅動程序認爲它最適合的位置),並且實際上不再需要您的CPU副本。但這些都是簡化的陳述,請查閱維也納國際組織的材料以獲取更多信

+0

嗯確定將在某個點上查看緩衝區對象。作爲我的第一個OpenGL應用程序,我希望在屏幕上獲得少量的基本應用程序,而不是在這個階段出現任何過於流血的邊緣,但是當我做更復雜的事情時,它肯定會考慮它。 –

+0

@Neil無論如何,它更多的意思是作爲一個小小的附註。一步一步地學習總是很好的。 –