Я следовал некоторым учебникам opengl на C ++ (переходя от использования java, так что я хорошо знаю openGL, но я немного медленнее обращаюсь с управлением памятью, указателями и т. Д.) Из учебника http://www.opengl.org , и в настоящее время у меня возникают проблемы с ошибкой при выходе из приложения.Я пытаюсь добавить массив атрибутов вершин нормали.Кажется, во время выполнения он работает нормально, но когда я выхожу из приложения, я получаю следующее:
«Ошибка проверки во время выполнения # 2 - стек вокруг переменной« normalbuffer »поврежден».
Я, конечно, немного погуглил и обнаружил, что эта ошибка обычно связана с ошибками массивов и индексацией за пределами границ, но normalbuffer
- это просто GLuint
.Насколько я могу судить, код для реализации моего normalbuffer
идентичен коду, реализующему мои позиции вершин и мою карту текстур uv.
Вот мой код инициализации:
// Create Vertex Buffer
GLuint vertexbuffer;
glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW);
// Create UV Buffer
GLuint uvbuffer;
glGenBuffers(1, &uvbuffer);
glBindBuffer(GL_ARRAY_BUFFER, uvbuffer);
glBufferData(GL_ARRAY_BUFFER, uvs.size() * sizeof(glm::vec2), &uvs[0], GL_STATIC_DRAW);
// Create Normals Buffer
GLuint normalbuffer;
glGenBuffers(2, &normalbuffer);
glBindBuffer(GL_ARRAY_BUFFER, normalbuffer);
glBufferData(GL_ARRAY_BUFFER, normals.size() * sizeof(glm::vec3), &normals[0], GL_STATIC_DRAW);
И затем мой зацикленный код (запускать каждый кадр):
//...
//Load the vertex positions array
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(
0, //Specify which attribute index we are using
3, //Size of the attribute
GL_FLOAT, //Type of attribute
GL_FALSE, //Normalized?
0, //Stride
(void*)0 //Array Buffer Offset
);
//Load the UV positions array
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, uvbuffer);
glVertexAttribPointer(
1, //Specify which attribute index we are using
2, //Size of the attribute
GL_FLOAT, //Type of attribute
GL_FALSE, //Normalized?
0, //Stride
(void*)0 //Array Buffer Offset
);
//Load the normal vectors array
glEnableVertexAttribArray(2);
glBindBuffer(GL_ARRAY_BUFFER, normalbuffer);
glVertexAttribPointer(
2, //Specify which attribute index we are using
3, //Size of the attribute
GL_FLOAT, //Type of attribute
GL_FALSE, //Normalized?
0, //Stride
(void*)0 //Array Buffer Offset
);
//glDrawArrays() happens here
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
//...
Эта ошибка, по-видимому, вообще не возникает во время выполнения, только когда я закрываю программу, нажимая клавишу escape (так что яне убивает процесс в VS).