当我尝试将顶点缓冲对象(VBO)用于我的简单opengl程序时,我得到了分段错误。首先让我分享导致seg错误的部分代码。
//GLuint objectVerticesVBO; type of my VBO
vector<glm::vec4> objectVertices; // I fill this vector somewhere in the code
glGenBuffers(1, &objectVerticesVBO);
glBindBuffer(GL_ARRAY_BUFFER, objectVerticesVBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec4)* objectVertices.size(), &objectVertices, GL_STATIC_DRAW );
glVertexPointer(3, GL_FLOAT, 0,0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
现在,这是我打印出的一些输出:
cout<< sizeof(glm::vec4)<<endl;
16
cout<< objectVertices.size()<<endl;
507
有谁知道导致分段错误的原因是什么?
另一个问题是:
当我将此部分也添加到renderScene函数中的代码时,我只得到一个空屏幕。
glUseProgram(gProgramShader);
glBindBuffer(GL_ARRAY_BUFFER, objectVerticesVBO);
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, objectIndicesVBO);
glDrawElements(GL_TRIANGLES, objectVertices.size(), GL_UNSIGNED_INT, 0);
会出现什么问题?
答案 0 :(得分:1)
在& objectVertices
来电中将& objectVertices[0]
替换为objectVertices.data()
或glBufferData
(C ++ 11)。
std::vector容器元素在内存中是连续的,而不是容器对象本身。