Вызов glDeleteBuffersARB приводит к segfault - PullRequest
0 голосов
/ 10 ноября 2011

Я пытаюсь динамически удалить VBO в моем приложении, чтобы создать новые VBO разных размеров.Тем не менее, когда моя программа пытается удалить их, она падает с ошибкой сегментации.

Ниже мой код, который выделяет VBO:

glGenBuffersARB(1, &_vertexBufferID);
glBindBufferARB(GL_ARRAY_BUFFER, _vertexBufferID);
glBufferDataARB(GL_ARRAY_BUFFER,
                _pMetadata->vertexBufferSize(),
                NULL,
                GL_STATIC_DRAW)

Данные периодически добавляются в VBO в следующихкод:

glBindBufferARB(GL_ARRAY_BUFFER, _vertexBufferID);
glBufferSubDataARB(GL_ARRAY_BUFFER,
                   _pMetadata->vertexSubBufferOffset(),
                   _pMetadata->vertexSubBufferSize(),
                   &row[0]); // row is a vector<float>

И в другом месте кода я пытаюсь удалить VBO следующим образом:

glDeleteBuffersARB(1, &_vertexBufferID)

И именно на этой строке я получаю ошибку сегментации.Я гарантировал, что правильный контекст OpenGL активен во время удаления.

1 Ответ

0 голосов
/ 14 ноября 2011

Я однажды отлаживал похожую проблему с текстурами, и это было вызвано переполнением буфера при заполнении его данными.Добавьте проверку границ непосредственно перед вызовами glBufferSubDataARB, чтобы убедиться, что вы не переполняетесь с помощью offset + size.Посмотрите на glGetBufferParameteriv с GL_BUFFER_SIZE в качестве параметра, чтобы получить границы для проверки

...