C++ glNamedBufferStorage上的Segfault
我目前正在阅读OpenGL超级圣经第7版。基于此,我编写了一些简单的代码,如下所示: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);
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工作正常。