Keine Anzeige von glDrawElements

Wenn ich mit glDrawArrays bekomme ich ein Dreieck in der Mitte von meinem Bildschirm, wie erwartet.
Aber wenn ich versuche, mit glDrawElements nichts kommt an alle.

Ich habe versucht, alle möglichen Dinge wie die Neuordnung der gl fordert, bewegen Sie den Zeiger-Attribut, und auch hart codieren, verts und index angezeigt wird, nichts zu tun, wie gezeigt, in meinem code.

Dieser code einmal ausgeführt:

//Initialise GLFW
if( !glfwInit() )
{
        fprintf( stderr, "Failed to initialize GLFW\n" );
        //return -1;
}

glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4); //4x antialiasing
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); //We want OpenGL 3.3
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE); //We don't want the old OpenGL

//Open a window and create its OpenGL context
if( !glfwOpenWindow( mApplication->getWindowWidth(), mApplication->getWindowHeight(), 0,0,0,0, 32,0, GLFW_WINDOW ) )
{
        fprintf( stderr, "Failed to open GLFW window\n" );
        glfwTerminate();
        //return -1;
}

//Initialize GLEW
glewExperimental=true; //Needed in core profile
if (glewInit() != GLEW_OK)
{
        fprintf( stderr, "Failed to initialize GLEW\n");
        //return -1;
}

glfwSetWindowTitle( "Hello World" );
glViewport( 0, 0, mApplication->getWindowWidth(), mApplication->getWindowHeight());
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClearColor(0.0f, 0.0f, 0.4f, 0.0f); //colour to use when clearing

Diese läuft jeden Schritt:

float verts[] = {
        -0.5f,  0.0f,   0.0f,
         0.5f,  0.0f,   0.0f,
         0.0f,  0.5f,   0.0f,
};

unsigned int index[] = {
        1, 2, 3,
};

glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

//VAO
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);

//VBO
glGenBuffers(1, &VBO );
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(verts) * sizeof(float), verts, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);

//IBO
glGenBuffers(1, &IBO );
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(index) * sizeof(unsigned int), index, GL_STATIC_DRAW);

glDrawArrays(GL_TRIANGLES, 0, 3); //this works
//glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, &index); //this doesnt

glfwSwapBuffers();

Dies ist eine sehr abgespeckte version von dem, was ich versuche zu erreichen, aber das problem ist genau das gleiche.

So erstellen Sie Ihre VAO/VBOs jedes mal, wenn Sie zeichnen? Das ist nicht der Weg, es zu tun. Einmal erstellen.. dann ziehen.
ich habe gelesen, dass, und es sieht immer noch wie mein code ausgeführt werden soll.

InformationsquelleAutor Neros | 2013-06-19

Schreibe einen Kommentar