Sauf erreur, "violation d'accès à la lecture de l'emplacement 0x00000000" signifie que vous essayez de déférer un pointeur qui n'a pas encore été initialisé, ce qui explique pourquoi je suis bloqué par cette erreur. Collé ci-dessous est mon code, avec un commentaire indiquant où le débogueur de studio visuel me dit l'erreur se produit. Cela me rend confus car aucun des arguments que je passe dans la fonction ne sont des pointeurs. Des idées?Accédez à l'emplacement de lecture de violation 0x00000000 malgré aucun pointeur
void Mesh::Render(Shader* shader)
{
glBindVertexArray(m_vao);
glEnableVertexAttribArray(shader->GetAttributeLocation("position"));
glVertexAttribPointer(0, 3, GL_FALSE, GL_FALSE, sizeof(Vertex), 0);
glDrawElements(GL_TRIANGLES, m_size, GL_UNSIGNED_INT, 0); // error here
glDisableVertexAttribArray(shader->GetAttributeLocation("position"));
glBindVertexArray(0);
}
m_size
est déclarée comme un entier de pointeur non
Et si elle aide à tous, le débogueur me amène à une source qui ne sont pas disponibles, et donc le débogueur points au lieu de cette ligne dans le démontage Je ne connais pas l'assemblage, donc je ne suis pas sûr que ce soit même de toute aide.
EDIT
Au cas où quelqu'un se demandait, je lient le tampon de matrice d'éléments nécessaires à l'utilisation Vaos. Le reste de la classe Mesh
est inférieure à
Mesh::Mesh()
{
glGenVertexArrays(1, &m_vao);
glGenBuffers(1, &m_vbo);
glGenBuffers(1, &m_ibo);
m_size = 0;
}
Mesh::~Mesh()
{
glDeleteVertexArrays(1, &m_vao);
glDeleteBuffers(1, &m_vbo);
glDeleteBuffers(1, &m_ibo);
}
void Mesh::AddVertices(Vertex* vertices, int vertSize, int* indices, int indexSize)
{
m_size = indexSize;
glBindVertexArray(m_vao);
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
glBufferData(GL_ARRAY_BUFFER, vertSize * sizeof(Vertex), vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexSize * sizeof(int), indices, GL_STATIC_DRAW);
}
qu'il existe des pointeurs. 'this' est un pointeur,' shader' est un pointeur, le dernier argument de 'glVertexAttribPointer' est un pointeur (que vous avez mis à zéro ....) –
Sont ** m_vao ** et d'autres variables utilisées ici toutes globales ? –
[Comme mentionné dans cette question] (http://stackoverflow.com/q/23026612/1287251) (et autres), vous avez lié un tampon invalide qui n'est accessible qu'une fois que 'glDrawElements' est appelé. Vous devriez tester tous vos appels aux fonctions OpenGL pour voir si l'un d'eux échoue. Il est possible que l'un d'entre eux ait échoué, donc vous n'avez pas de tampon valide mais vous essayez quand même de procéder au rendu. – Cornstalks