所以,我以前使用的顶点数组的缓冲器(纤芯分布3.3),设置如下:卸下调用glGenVertexArrays()的结果在黑屏
int offset = 0;
glGenVertexArrays(1, &m_vba);
glBindVertexArray(m_vba);
glGenBuffers(1, &m_vbo);
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
glBufferData(GL_ARRAY_BUFFER, TOTAL_DATA_SIZE, nullptr, GL_STATIC_DRAW);
// Vertex data
glBufferSubData(GL_ARRAY_BUFFER, offset, VERTEX_DATA_SIZE, vertices);
offset += VERTEX_DATA_SIZE;
// Normal data
glBufferSubData(GL_ARRAY_BUFFER, offset, NORMAL_DATA_SIZE, normals);
offset += NORMAL_DATA_SIZE;
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, reinterpret_cast<GLvoid *>(VERTEX_DATA_SIZE));
我不使用索引缓冲器。像这样渲染:
glBindVertexArray(m_vba);
glDrawArrays(GL_TRIANGLES, 0, NUM_VERTICES);
这工作得很好。但是,我发现glGenVertexArrays()可能无法使用,例如在Android上。因此我开始删除它。还有那个让我发疯的问题。
如果我从数据初始化中删除VBA这样的东西:
int offset = 0;
glGenBuffers(1, &m_vbo);
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
glBufferData(GL_ARRAY_BUFFER, TOTAL_DATA_SIZE, nullptr, GL_STATIC_DRAW);
// Vertex data
glBufferSubData(GL_ARRAY_BUFFER, offset, VERTEX_DATA_SIZE, vertices);
offset += VERTEX_DATA_SIZE;
// Normal data
glBufferSubData(GL_ARRAY_BUFFER, offset, NORMAL_DATA_SIZE, normals);
offset += NORMAL_DATA_SIZE;
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, reinterpret_cast<GLvoid *>(VERTEX_DATA_SIZE));
..和渲染这样的:
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, reinterpret_cast<GLvoid *>(VERTEX_DATA_SIZE));
glDrawArrays(GL_TRIANGLES, 0, NUM_VERTICES);
..我得到的只是一个黑色的屏幕。而我不明白的是,如果我在代码中添加了某些地方,例如数据设置后:
GLuint foo;
glGenVertexArrays(1, &foo);
glBindVertexArray(foo);
然后,所有东西都再次正确呈现。是否有一些副作用导致这种情况?在安装完成后,我再也不会绑定这个“foo”缓冲区,尽管多个对象可以使用自己的类似缓冲区继续渲染,但仍然可以工作!
显然事情并没有像我预测的那样:)问题是,我应该在删除glGenVertexArrays()后在代码中更改什么?我做错了什么?
谢谢!你刚刚救了我的周末:) – juzzlin 2013-04-27 18:50:02