I have a passToOpenGL function below to generate a vao, vbo, index buffer. After I generate, how can I update the vertices?
I thought it would be to create a function like this but it did not work:
void VBOLineLoop::update(GLfloat fWidth, GLfloat fHeight)
{
float vVerts;
vVerts=new float[usVerts3];
GLuint bytes_positions=sizeof(GLfloat)3usVerts;
float fOuterHalfWidth=fWidth/2.0f; float fOuterHalfHeight=fHeight/2.0f;
GLushort usIndexSubi=0;
vVerts[0]=-fOuterHalfWidth;
vVerts[1]=-fOuterHalfHeight;
vVerts[2]=0.0f;
vVerts[3]=+fOuterHalfWidth;
vVerts[4]=-fOuterHalfHeight;
vVerts[5]=0.0f;
vVerts[6]=+fOuterHalfWidth;
vVerts[7]=+fOuterHalfHeight;
vVerts[8]=0.0f;
vVerts[9]=-fOuterHalfWidth;
vVerts[10]=+fOuterHalfHeight;
vVerts[11]=0.0f;
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
glBufferSubData(GL_ARRAY_BUFFER, 0, bytes_positions, vVerts);
glBindBuffer(GL_ARRAY_BUFFER, 0);
delete vVerts;
}
void VBOLineLoop::passToOpenGL(float * vVerts, float *vColor)
{
GLuint bytes_positions=sizeof(GLfloat)3usVerts;
GLuint bytes_colors=sizeof(GLfloat)4usVerts;
GLuint bytes_elements=sizeof(GLushort)*usNumberElements;
// Set up the vertex attributes
glGenVertexArrays(1, vao);
glBindVertexArray(vao[0]);
// Set up the element array buffer
glGenBuffers(1, ebo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo[0]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, bytes_elements, elementsofLineLoop, GL_DYNAMIC_DRAW);
glGenBuffers(1, vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
glBufferData(GL_ARRAY_BUFFER, bytes_positions + bytes_colors , NULL, GL_DYNAMIC_DRAW);
glBufferSubData(GL_ARRAY_BUFFER, 0, bytes_positions, vVerts);
glBufferSubData(GL_ARRAY_BUFFER, bytes_positions, bytes_colors, vColor);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glVertexAttribPointer(2, 4, GL_FLOAT, GL_FALSE, 0, (const GLvoid *)(bytes_positions));
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(2);
}
Any help is appreciated…