0
我完全不熟悉OpenGL,所以我認爲我可能在這裏做了一些愚蠢的事情。基本上我只是試圖對我創建的緩衝區對象進行內存映射,但glMapBuffer()
正在返回NULL
並給出了錯誤代碼GL_INVALID_ENUM
。這裏是一個的失敗的相關代碼:GL_INVALID_ENUM with glMapBuffer()
glGenVertexArrays(1, &m_vao);
glBindVertexArray(m_vao);
glGenBuffers(1, &m_vertex_buffer);
glNamedBufferStorage(m_vertex_buffer,
BUFFER_SIZE,
NULL,
GL_MAP_READ_BIT | GL_MAP_WRITE_BIT | GL_DYNAMIC_STORAGE_BIT);
glBindBuffer(GL_ARRAY_BUFFER, m_vertex_buffer);
void* vertex_buffer = glMapBuffer(GL_ARRAY_BUFFER, GL_READ_ONLY);
if (!vertex_buffer)
{
GLenum error = glGetError();
fprintf(stderr, "Buffer map failed! %d (%s)\n", error, gluErrorString(error));
return;
}
glUnmapBuffer(GL_ARRAY_BUFFER);
glBindBuffer(GL_ARRAY_BUFFER, 0);
這是印刷:
Buffer map failed! 1280 (invalid enumerant)
據the docs,如果目標不是可用目標枚舉的人會返回錯誤。也就是說,GL_ARRAY_BUFFER
肯定列爲可用。
我只是在這裏做錯了什麼?
「*我只是在這裏做得不對*?」你的意思是,除了不使用DSA功能映射緩衝區?你已經在使用'glNamedBufferStorage';爲什麼不把它與DSA進行映射呢? –
@NicolBolas,我嘗試使用glNamedBufferStorage,但也有同樣的問題(除了錯誤代碼是GL_INVALID_OPERATION)。我根據理論認爲它可能會得到我的司機更好的支持,我又回到了舊版本。雖然沒有運氣。 –
^我的意思是glMapNamedBuffer,對不起。編輯評論的時間太晚了。 (順便說一句,我剛剛看到你的個人資料 - 我實際上一直在閱讀你的OpenGL教程,感謝你把它們放在一起)。 –