C++ glNamedBufferStorage上的Segfault

C++ glNamedBufferStorage上的Segfault,c++,opengl,C++,Opengl,我目前正在阅读OpenGL超级圣经第7版。基于此,我编写了一些简单的代码,如下所示: void startup() { static const float data[] = { 0.25f, -0.25f, 0.5f, 1.0f, -0.25f, -0.25f, 0.5f, 1.0f, 0.25f, 0.25f, 0.5f, 1.0f, }; glGenVertexArrays(1, &m_VAO);

我目前正在阅读OpenGL超级圣经第7版。基于此,我编写了一些简单的代码,如下所示:

void startup() {
    static const float data[] = {
        0.25f, -0.25f, 0.5f, 1.0f,
        -0.25f, -0.25f, 0.5f, 1.0f,
        0.25f, 0.25f, 0.5f, 1.0f,
    };


    glGenVertexArrays(1, &m_VAO);
    glBindVertexArray(m_VAO);

    glGenBuffers(1, &m_VBO);
    glBindBuffer(GL_ARRAY_BUFFER, m_VBO);
    printf("Size of data[]: %lu bytes\n", sizeof(data));
    glNamedBufferStorage(m_VBO, sizeof(data), data, GL_DYNAMIC_STORAGE_BIT);
    glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), NULL);
    glEnableVertexAttribArray(0);

}
这是在主渲染循环之前运行的类的方法

问题是此代码在
glNamedBufferStorage
处生成segfault

我试着用gdb调试它,只了解了SEGFULT发生的地方,而不是原因。我试图了解
数据
的大小是否有问题(因此
打印f大小
)。但似乎没问题。我还尝试使用不同的旗帜-也没有用

我还对附带的源代码做了
grep-R
,但没有发现使用示例


系统:Ubuntu,clang++

使用

printf(“OpenGL版本%s\n”,glGetString(GL_版本))


glNamedBufferStorage仅在OpenGL 4.5上受支持

您在使用什么?您的实现是否支持OpenGL 4.5?@Nicolas我正在使用书中的示例框架,该框架反过来使用gl3w+glfw-而且似乎运行良好-示例正确编译并运行,我以前的一些示例(不尝试创建VBO)也运行良好。您是对的!当我发布这个问题时,我实际上是在升级驱动程序。似乎我的旧驱动程序只支持4.4(我确信它也支持4.5!),而新驱动程序支持4.5。现在glNamedBufferStorage工作正常。