显示动态OpenGL VBO的问题

时间:2015-03-20 23:28:07

标签: opengl dynamic vbo

我一直在使用OpenGL中的VBO,我显然不明白我在这里做错了什么。我想显示一个带有文本的VBO,每个帧都会更新。这次的目标是FPS计数器,但其他应用程序绝对可行。

直到实际代码:如果我在初始化函数中设置VBO然后在渲染函数中绘制它,我可以让它工作得很好。但是,如果我尝试在绘图功能中编辑它,则不会显示任何内容。在调试时我发现所有包含数据的向量都是完全正确的(我甚至用相同的文本更新了VBO并且向量确实相同),所以问题必须在于我对VBO的处理,而不是内部的数据他们。

这是初始化/渲染命令:

glGenBuffers(1, &pntvbo);
glBindBuffer(GL_ARRAY_BUFFER, pntvbo);
glBufferData(GL_ARRAY_BUFFER, newpoints.size() * sizeof(vec3f), &newpoints[0], GL_STREAM_DRAW);


glGenBuffers(1, &indvbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indvbo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, newindex.size() * sizeof(unsigned int), &newindex[0], GL_STREAM_DRAW);

我也试过这个,但没有成功:

glBindBuffer(GL_ARRAY_BUFFER, pntvbo);
glBufferData(GL_ARRAY_BUFFER, newpoints.size() * sizeof(vec3f), NULL, GL_STREAM_DRAW);
glBufferSubData(GL_ARRAY_BUFFER, 0, newpoints.size() * sizeof(vec3f), &newpoints[0]);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indvbo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, newindex.size() * sizeof(unsigned int), NULL, GL_STREAM_DRAW);
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER,0, newindex.size() * sizeof(unsigned int), &newindex[0]);

并且绘制命令本身:

glClientActiveTexture(GL_TEXTURE5);
glEnable(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, &newtexts[0]);
glBindBuffer(GL_ARRAY_BUFFER, pntvbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indvbo);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3,GL_FLOAT,sizeof(vec3f),0);    

glDrawElements(GL_TRIANGLES, newindex.size() , GL_UNSIGNED_INT, 0); 
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

我确定我在这里做错了,但我无法弄清楚我的生活是什么。正如我所说,如果我只在程序的初始化函数中初始化或编辑VBO,一切都很好,但是一旦将相同的函数放入渲染函数中,就不会显示任何内容。任何帮助将不胜感激。

0 个答案:

没有答案