Нарушение прав доступа 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() вместо этого, все работает отлично. Я уже убедился, что создал контекст OpenGL с glfw и правильно инициализировал glew.
1 ответ
Решение
Хорошо, я наконец нашел проблему. Когда я проектировал свой класс GLFW-Window, я использовал подсказку GLFW_OPENGL_FORWARD_COMPAT для создания совместимого с форвардом контекста OpenGL. Я не знаю, почему я это сделал, но когда я не использую эту подсказку, все работает отлично.:)