Weird OpenGL-Problem beim Ausklammern von Code

So habe ich einen Code, der einen Puffer erstellt und einige Eckpunkte darin platziert:

GLuint vertexbuffer;
glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glEnableVertexAttribArray(0);

Ich binde es auch an ein Shader-Attribut:

glBindAttribLocation(programID, 0, "pos");

Und schließlich zeichne es:

glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
g,lDrawArrays(GL_TRIANGLES, 0, 3);

Natürlich gibt es auch anderen Code, aber all diese Dinge laufen gut (zeigt ein rotes Dreieck auf dem Bildschirm an)

In dem Moment, in dem ich versuche, dieses Zeug in einer Struktur herauszufiltern, wird nichts angezeigt (hier ist eine der Methoden):

void loadVerts(GLfloat verts[], int indices)
    {
        GLuint vertexbuffer;
        glGenBuffers(1, &vertexbuffer);
        glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
        glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);
        glVertexAttribPointer(indice, indices, GL_FLOAT, GL_FALSE, 0, 0);
        glBindBuffer(GL_ARRAY_BUFFER, 0);
        glEnableVertexAttribArray(indice);
        indice++;
        buffers.push_back(vertexbuffer);
    }

Ich habe diesen Code vervierfacht und verfolgt, um sicherzustellen, dass er bei jedem Aufruf mit dem obigen Code übereinstimmt. Mein Draw Call entspricht fast meinem Original:

void draw()
    {
        glBindBuffer(GL_ARRAY_BUFFER, buffers.at(0));
        glDrawArrays(GL_TRIANGLES, 0, 3);
    }

Ich habe auch versucht, dies zu einer Klasse zu machen und viele Teile des Codes hinzuzufügen / zu ändern.buffers undindice sind nur einige Variablen, um Puffer und Attributindizes zu verfolgen.buffers ist einstd::vector<GLuint> FWIW.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage