c++ opengl nvoglv32.dll错误

Posted

技术标签:

【中文标题】c++ opengl nvoglv32.dll错误【英文标题】:c++ opengl nvoglv32.dll error 【发布时间】:2016-05-15 06:20:41 【问题描述】:

我有一个 sprite 类来处理初始化 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);

【问题讨论】:

抛出了哪个异常?请尽可能准确。 @JanHenke 很抱歉没有在原始帖子中包含此内容,但这里是 Exception thrown at 0x692CC760 (nvoglv32.dll) in Flora.exe: 0xC0000005: Access violation reading location 0x00000000.,这就是 Visual Studio 给我的全部内容。 您正在尝试取消引用 NULL 指针。确保所有数据在使用前都已正确初始化。 有没有办法找到发生这种情况的地方?因为就像我说的那样,我认为它在 _vboID_vertNum 中,但我不确定是哪个或是否是其中任何一个,这也是我正在使用的唯一两个变量,它们都已初始化 你有没有调试过这个问题?单步执行说明并查看引发异常的位置。实际上这是非常基本的编程技能。 【参考方案1】:

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

当您在需要缓冲区绑定目标的上下文中使用 GL_VERTEX_ARRAY 时,您应该只会收到 GL_INVALID_ENUM 错误,并且调用不会产生进一步的影响。因此,您在 glVertexAttribPointer 调用期间没有绑定 GL_ARRAY_BUFFER,这在旧版或核心配置文件中将导致 GL 将您的指针解释为指向客户端内存的指针。

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

【讨论】:

啊,不错,我已修复它,但它仍然给我一个错误消息,但这次略有不同。 Exception thrown at 0x69B3C760 (nvoglv32.dll) in Flora.exe: 0xC0000005: Access violation reading location 0x00000000.

以上是关于c++ opengl nvoglv32.dll错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 EGL 1.4 查询 OpenGL32.dll 版本问题

错误提示 - WeChatWeb.exe - 损坏的图像(OPENGL32.dll)

构建成功,但尝试运行程序时出现 GLEW 错误

VS2010下用OpenGL“缺少glut32.dll”

分析时,大部分时间都花在 nvoglv64.dll 中。我应该推断啥?

制作替换系统库中的函数调用的 DLL 时出现问题