OpenGL VBO EXC_BAD_ACCESS崩溃

时间:2015-08-17 06:06:03

标签: c++ opengl exc-bad-access vbo cgal

我想开始使用VBO来渲染我的模型,但是我遇到了一个我无法解决的错误。我已经看到,当人们忘记取消绑定缓冲区时会发生这种情况,但据我所知,我正确地做到了这一点。我会给你免费的打印声明,但我也确定在打电话

之后有一个openGL错误1281
glBindBuffer(GL_ARRAY_BUFFER, _vboID); 

在drawMe()函数中。我猜1281表示价值不好......但我不知道这意味着什么。如果你能看到出了什么问题,请赐教。

我在构造模型对象时将_vboID初始化为0。

_vboID = 0;

然后:

void model::genBuffers() {
    if (_vboID == 0){
    glGenBuffers(1, &_vboID);
    float vertexData[numFaces*3*3]; // numFaces * 3 vertices per face * 3 dimensions per vertex
    /* fill */
    int i = 0;
    Polyhedron::Halfedge_const_handle h;
    for (Polyhedron::Facet_const_iterator faceIter = polyhedron.facets_begin(); faceIter != polyhedron.facets_end(); ++faceIter) {
        CGAL::Point_3<Kernel> p1,p2,p3;
        h = faceIter->halfedge();
        p1 = h->vertex()->point();
        p2 = h->next()->vertex()->point();
        p3 = h->prev()->vertex()->point();
        vertexData[i] = p1.hx(); i++; 
        vertexData[i] = p1.hy(); i++; 
        vertexData[i] = p1.hz(); i++; 
        vertexData[i] = p2.hx(); i++; 
        vertexData[i] = p2.hy(); i++; 
        vertexData[i] = p2.hz(); i++; 
        vertexData[i] = p3.hx(); i++; 
        vertexData[i] = p3.hy(); i++; 
        vertexData[i] = p3.hz(); i++;
    }
    glBindBuffer(GL_ARRAY_BUFFER, _vboID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0); // Unbind Buffer
    }
}

void model::drawMe() {
    glBindBuffer(GL_ARRAY_BUFFER, _vboID); /* glError 1281 generated after this line?? */
    glEnableVertexAttribArray(0); 
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);<<std::endl;
    glDrawArrays(GL_TRIANGLES, 0, numFaces*3); /* crashes here */
    glDisableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
}

错误消息:

异常类型:EXC_BAD_ACCESS(SIGSEGV)

例外代码:KERN_INVALID_ADDRESS位于0x0000000000000008

VM区域接近0x8: - &GT;     __TEXT 0000000107ed3000-00000001081a9000 [2904K] r-x / rwx SM = COW / Users / USER / Documents / * / project_vVBO.app/Contents/MacOS/project_vVBO

Thread 0 Crashed :: Dispatch queue:com.apple.main-thread

0 GLEngine 0x00007fff99088f9f gleRunVertexSubmitImmediate + 10223

1 GLEngine 0x00007fff98f558ce glDrawArrays_Exec + 626

1 个答案:

答案 0 :(得分:0)

解决

我没有意识到我正在复制“模型”对象,导致解析器被调用并删除我创建的缓冲区。

model::~model()
{
    if (_vboID != 0)
        glDeleteBuffers(1, &_vboID);
}

非常感谢@RetoKoradi引起我的注意