通过使用顶点缓冲对象来Opengl

时间:2014-12-28 17:54:26

标签: c++ opengl glsl

当我尝试将顶点缓冲对象(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);

会出现什么问题?

1 个答案:

答案 0 :(得分:1)

& objectVertices来电中将& objectVertices[0]替换为objectVertices.data()glBufferData(C ++ 11)。

std::vector容器元素在内存中是连续的,而不是容器对象本身。