关于glNamedBufferStorage

时间:2016-10-22 15:49:20

标签: 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);
    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 ++

1 个答案:

答案 0 :(得分:1)

使用

检查您的OpenGL版本

printf("OpenGL version %s\n", glGetString(GL_VERSION));

仅在OpenGL 4.5上支持glNamedBufferStorage