[英]OpenGL updating vertices array/buffer
當我第一次向緩沖區添加一些頂點時,這些是我正在調用的相關函數
// Create and bind the object's Vertex Array Object:
glGenVertexArrays(1, &_vao);
glBindVertexArray(_vao);
// Create and load vertex data into a Vertex Buffer Object:
glGenBuffers(1, &_vbo);
glBindBuffer(GL_ARRAY_BUFFER, _vbo);
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), &vertices[0], GL_STATIC_DRAW);
// Tells OpenGL that there is vertex data in this buffer object and what form that vertex data takes:
// Obtain attribute handles:
_posAttrib = glGetAttribLocation(program, "position");
glEnableVertexAttribArray(_posAttrib);
glVertexAttribPointer(_posAttrib, // attribute handle
4, // number of scalars per vertex
GL_FLOAT, // scalar type
GL_FALSE,
0,
0);
// Unbind vertex array:
glBindVertexArray(0);
但是稍后在我的程序中,我想添加一些頂點。
我通過以下方式執行此操作(在單獨的函數中:
add_vertices(x,y); //adds the necessary vertices to the vector.
glGenBuffers(1, &_vbo);
glBindBuffer(GL_ARRAY_BUFFER, _vbo);
glBufferData(GL_ARRAY_BUFFER, (TRIANGLE_AMOUNT+1)*4*_number_of_circles * sizeof(float), &vertices[0], GL_STATIC_DRAW);
假設glBufferData的第二個參數中的時髦大小很好,我錯過了什么嗎? 還有其他需要調用的OpenGL函數嗎?
我沒有得到任何錯誤,但是當我試圖通過使用頂點的不同子集循環glDrawArrays來繪制具有新頂點的額外形狀時,沒有任何反應。 只繪制第一個形狀。
我希望這是半連貫的......如果有任何我沒有提供的信息,請告訴我。
干杯。
在OpenGL中,更改緩沖區和交換緩沖區數據是兩個不同的事情,需要在之后采取不同的操作:
交換數據
在這種情況下,需要先前生成的vbo。 要上傳新數據,只需要綁定緩沖區並緩沖新數據:
glBindBuffer(GL_ARRAY_BUFFER, _vbo);
glBufferData(GL_ARRAY_BUFFER, (TRIANGLE_AMOUNT+1)*4*_number_of_circles * sizeof(float),
&vertices[0], GL_STATIC_DRAW);
創建一個新緩沖區
在這種情況下, glGenerateBuffers
會生成一個新緩沖區,並且(除了上傳數據外)還必須更新所有VAO綁定。
旁注:在上面顯示的代碼中,您創建了一個新緩沖區而不刪除以前的緩沖區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.