Wenn ich nicht falsch bin, bedeutet "Zugriffsverletzung lesen Speicherort 0x00000000" bedeutet, Sie versuchen, einen Zeiger, der noch initialisiert werden muss, zu unterscheiden, weshalb ich bei diesem Fehler ratlos bin. Unten ist mein Code eingefügt, mit einem Kommentar, der angibt, wo der Visual Studio-Debugger mir sagt, dass der Fehler auftritt. Es verwirrt mich, weil keines der Argumente, die ich in die Funktion übergebe, Zeiger sind. Irgendwelche Ideen?Zugriff Verletzung Leseort 0x00000000 trotz keine Zeiger
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
als nicht Zeiger integer deklariert
Und wenn es überhaupt hilft, der Debugger führt mich zu einer Quelle, die nicht verfügbar, so dass der Debugger Punkte in der Demontage auf dieser Linie stattdessen :
001DFEC7 mov edi,dword ptr [esi]
Ich weiß nicht Assembly, ich bin mir nicht sicher, ob das überhaupt irgendeine Hilfe ist.
EDIT
Falls jemand wurde fragen, ich den Element-Array-Puffer für die Verwendung von vaos erforderlich bin binden. Der Rest der Klasse ist Mesh
unterhalb
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);
}
sicher gibt es Zeiger. 'this' ist ein Zeiger,' shader' ist ein Zeiger, das letzte Argument für 'glVertexAttribPointer' ist ein Zeiger (den Sie auf Null gesetzt haben ....) –
Sind ** m_vao ** und andere hier verwendete Variablen alle global ? –
[Wie in dieser Frage erwähnt] (http://stackoverflow.com/q/23026612/1287251) (und andere), haben Sie einen ungültigen Puffer gebunden, auf den nur zugegriffen wird, wenn 'glDrawElements' aufgerufen wird. Sie sollten alle Ihre Aufrufe von OpenGL-Funktionen testen, um festzustellen, ob einige von ihnen fehlschlagen. Es ist möglich, dass einer von ihnen fehlgeschlagen ist, also haben Sie keine gültige Puffergrenze, aber Sie versuchen dennoch, mit dem Rendern fortzufahren. – Cornstalks