我目前正在阅读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
生成段错误。
我尝试用gdb调试它 - 并且只学习了段错误发生的地方,而不是为什么。我试图了解data
的大小是否存在问题(因此printf sizeof
)。但似乎没问题。我也尝试使用不同的标志 - 也无济于事。
我还在附带的源代码上做了grep -R
,但没有找到用法示例。
系统:Ubuntu,clang ++
答案 0 :(得分:1)
使用
检查您的OpenGL版本 printf("OpenGL version %s\n", glGetString(GL_VERSION));
仅在OpenGL 4.5上支持glNamedBufferStorage