我想在对象中创建多个顶点缓冲区(逐个对象)。构造函数是:
VertexBuffer::VertexBuffer(const GLvoid *data,
GLsizeiptr size,
GLenum mode,
GLsizei count,
GLsizei stride,
ShaderInterface *shaderInterface,
GLvoid *positionOffset,
GLvoid *normalOffset)
: _mode(mode),
_count(count),
_stride(stride),
_shaderInterface(shaderInterface),
_positionOffset(positionOffset),
_normalOffset(normalOffset)
{
glGenBuffers(1, &_vertexBufferID);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBufferID);
glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);
//
GLuint vao = 0;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glEnableVertexAttribArray(0); //??????
glBindBuffer(GL_ARRAY_BUFFER, _vertexBufferID);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
//
}
如果我创建一个对象VertexBuffer,这可以正常工作。但是如果我创建另一个对象(我不会使用它)并且我再次绘制第一个对象,则结果不正确(例如,显示的对象位于其他位置)。为什么呢?
答案 0 :(得分:0)
您似乎无法将vao
存储在任何地方,但您应该这样做。在绘制每个对象之前,在致电任何glBindVertexArray
之前,您应vao
_vertexBufferID
(但不是glDraw*
)。
另见this answer,了解VAO的实际状况。