2016-10-22 202 views
-1

我目前正在閱讀OpenGL超級聖經第7版。基於此,我寫了一些這樣的簡單代碼:glNamedBufferStorage上的Segfault

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,鐺++

+0

什麼[OpenGL圖像加載庫(HTTPS://www.opengl .org/wiki/OpenGL_Loading_Library)是否在使用?你的實現是否支持OpenGL 4.5? –

+0

@NicolBolas我正在使用本書中的示例框架,該書依次使用了gl3w + glfw - 它看起來工作正常 - 正確編譯和運行的示例以及我之前的一些示例(不嘗試創建VBO)也是如此工作得很好。 – poetryofruins

回答

1

檢查你的OpenGL版本

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

glNamedBufferStorage僅支持OpenGL的4.5

+1

你是對的!當我發佈這個問題時,我實際上是升級了驅動程序。看起來像我的舊驅動程序只支持4.4(我覺得它確實支持4.5!),而新的驅動程序有4.5。現在glNamedBufferStorage工作正常。 – poetryofruins