我目前正在閱讀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,鐺++
什麼[OpenGL圖像加載庫(HTTPS://www.opengl .org/wiki/OpenGL_Loading_Library)是否在使用?你的實現是否支持OpenGL 4.5? –
@NicolBolas我正在使用本書中的示例框架,該書依次使用了gl3w + glfw - 它看起來工作正常 - 正確編譯和運行的示例以及我之前的一些示例(不嘗試創建VBO)也是如此工作得很好。 – poetryofruins