c ++ opengl nvoglv32.dll错误

时间:2016-05-15 06:20:42

标签: c++ opengl glew

我有一个sprite类来处理初始化精灵并绘制它但我一直收到此错误Exception thrown at 0x68ECC760 (nvoglv32.dll)这似乎主要是因为_vboID_vertNum我是不完全确定他们有什么问题,这里是它的源代码

void Sprite::init(int vertNum, float r, Shape shape) {
    _vertNum = vertNum;
    if (_vboID = 0) {
        glGenBuffers(1, &_vboID);
    }
    std::vector<Vertex> vertexData(vertNum);
    if (shape == Shape::CIRCLE) {
        for (int i = 0; i < vertNum; i++) {
            vertexData[i].setPosition(r*cos(i), r*sin(i));
        }
    }
    for (int i = 0; i < _vertNum; i++) {
        vertexData[i].setColor(1, 1, 1, 1);
    }
    glBindBuffer(GL_VERTEX_ARRAY, _vboID);
    glBufferData(GL_VERTEX_ARRAY, sizeof(vertexData), vertexData.data(), GL_DYNAMIC_DRAW);
    glBindBuffer(GL_VERTEX_ARRAY, 0);
}

void Sprite::draw() {
    //bind buffer array
    glBindBuffer(GL_VERTEX_ARRAY, _vboID);

    //use first vertex attrib array
    glEnableVertexAttribArray(0);

    //pointer to vertices location
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, position));
    //pointer to vertices color
    glVertexAttribPointer(1, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, color));

    //Draw the 6 vertices to the screen
    glDrawArrays(GL_POLYGON, 0, _vertNum);

    //Disable the vertex attrib array. This is not optional.
    glDisableVertexAttribArray(0);

    //Unbind the VBO
    glBindBuffer(GL_ARRAY_BUFFER, 0);
}

1 个答案:

答案 0 :(得分:0)

GL_VERTEX_ARRAY不是有效的缓冲区绑定目标。您要找的是GL_ARRAY_BUFFER

在期望缓冲区绑定目标的上下文中使用GL_VERTEX_ARRAY时,应该只会出现GL_INVALID_ENUM错误,并且调用将不再有效。因此,在GL_ARRAY_BUFFER调用期间,您没有绑定glVertexAttribPointer,这在遗留或核心配置文件中将导致GL将您的指针解释为指向客户端内存的指针。

您应该添加一些错误检查,或者使用调试回调,这样就可以及早发现这些简单的错误。