Нарушение прав доступа 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. Я не знаю, почему я это сделал, но когда я не использую эту подсказку, все работает отлично.:)

Другие вопросы по тегам