2
我想將一些粒子存儲在着色器存儲緩衝區中。我使用glMapBufferRange()函數來設置粒子值,但每次調用此函數時,我都會收到訪問衝突錯誤。glMapBufferRange訪問衝突
glGenBuffers(1, &bufferID);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, bufferID);
glBufferData(GL_SHADER_STORAGE_BUFFER, numParticles*sizeof(Particle), NULL ,GL_STATIC_DRAW);
struct Particle* particles = (struct Particle*) glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, numParticles*sizeof(Particle), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
for(int i = 0; i < numParticles; ++i){
//.. Do something with particles..//
}
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);
當我使用glMapBuffer()代替時,一切正常。我已經確定我已經用glfw創建了一個OpenGL上下文,並正確初始化了glew。
你確定glMapBufferRange由於某種原因沒有返回NULL嗎? – Sergey
我沒有在上面的代碼中包含所有的錯誤檢查,但在glMapBufferRange()調用之後,我檢查了一個NULL指針。不幸的是,執行甚至沒有達到這個目標。它總是停在glMapBufferRange()處。 – Stan
你可以glMapBufferRange與另一個目標類型比GL_SHADER_STORAGE?在最初的ARB擴展中,SHADER_STORAGE被指定爲只被glMapBuffer接受,而不是glMapeBufferRange,這只是爲OpenGL-4.3添加的,我不會感到驚訝,如果驅動程序仍然有點bug,尤其是OpenGL-4.3還是很新的。 – datenwolf