glDrawArrays no dibuja nada en el modo GL_TRIANGLES

Mi problema es que el comando glDrawArray deja de funcionar. He escrito algunos progtwigs que utilicé ese comando. Sin embargo ahora, no tengo ni idea de por qué no funciona.

Pero todavía puedo dibujar líneas en la pantalla con GL_LINES lugar de GL_TRIANGLES .

Aquí está mi código:

 #include "Mesh.h" #include  Mesh::Mesh() { glGenVertexArrays(1, &vao); glBindVertexArray(vao); glGenBuffers(1, &vbo); size = 0; } void Mesh::AddVertices(const Vertex vertices[], int length) { size = length; glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); } void Mesh::Draw() { glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, vbo); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, Vertex::SIZE * 4, 0); glDrawArrays(GL_TRIANGLES, 0, size); glDisableVertexAttribArray(0); } 

El sorteo siempre es llamado por la clase de juego. Y mi clase de vértice:

 #include "Vertex.h" Vertex::Vertex(glm::vec3 pos) { this->pos = pos; } Vertex::Vertex(float x, float y, float z) { pos = glm::vec3(x, y, z); } glm::vec3 Vertex::GetPos() const { return pos; } void Vertex::SetPos(glm::vec3 pos) { this->pos = pos; } 

He encontrado la solución. Cuando inicializo mis funciones OpenGL, accidentalmente escribí glFrontFace(GL_CW) lugar de glFrontFace(GL_CCW) .

sizeof(vertices) es sizeof(void*) , porque en C o C ++ las matrices en los argumentos de función decaen a los punteros. Debe usar la length proporcionada en el segundo argumento, si es tamaño en bytes.