I am trying to load models in at run time, say when a user presses a button. However when it comes round to draw the loaded model, I get the following exception and nothing gets drawn:
First-chance exception at 0x54E37020 (nvoglv32.dll) in OpenGLProject.exe: 0xC0000005: Access violation reading location 0x00000000
If however I use the same code before I call glutMainLoop() its all fine
Is there some kind of limitation as to how and when you can create VBOs and what not? This is the code I use to load my models:
for(MeshNonProcessed m_unProcessed : meshes)
{
Mesh mesh;
glGenBuffers(1, &mesh.Vertex_VBO);
glBindBuffer(GL_ARRAY_BUFFER, mesh.Vertex_VBO);
glBufferData(GL_ARRAY_BUFFER, m_unProcessed.Vertices.size() * sizeof(Vertex), m_unProcessed.Vertices.data(), GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glGenBuffers(1, &mesh.Element_VBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh.Element_VBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_unProcessed.Elements.size() * sizeof(unsigned int),
m_unProcessed .Elements.data(), GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
mesh.Element_Count = m_unProcessed.Elements.size();
glGenVertexArrays(1, &mesh.VAO);
glBindVertexArray(mesh.VAO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh.Element_VBO);
glBindBuffer(GL_ARRAY_BUFFER, mesh.Vertex_VBO);
// bind vertex attributes
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(0));
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(sizeof(float) * 3));
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(sizeof(float) * 6));
glEnableVertexAttribArray(3);
glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(sizeof(float) * 8));
glEnableVertexAttribArray(4);
glVertexAttribPointer(4, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(sizeof(float) * 11));
glEnableVertexAttribArray(5);
glVertexAttribPointer(5, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(sizeof(float) * 14));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}