opengl es el uso de VBO: sin representación de geometry

Estoy intentando configurar VBO para mi código de representación para get más fps. Funcionó para VBOs separados para coorderadas de position, color y textura de vértice, pero después de transferirlos a datos de vértices entrelazados no hay representación de geometry. Aquí está mi function de configuration:

const GLsizeiptr data_size = NUMBER_OF_CUBE_VERTICES * 9 *sizeof(float); // allocate a new buffer glGenBuffers(1, &cubeVBO); glBindBuffer(GL_ARRAY_BUFFER, cubeVBO); glBufferData(GL_ARRAY_BUFFER, data_size, data, GL_STATIC_DRAW); float* ptr = (float*)data; glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), (ptr + 0)); glEnableVertexAttribArray(ATTRIB_VERTEX); glVertexAttribPointer(ATTRIB_COLOR, 4, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), (ptr + 3)); glEnableVertexAttribArray(ATTRIB_COLOR); glVertexAttribPointer(ATTRIB_TEXCOORD0, 2, GL_FLOAT, GL_FALSE, sizeof(struct Vertex), (ptr + 7)); glEnableVertexAttribArray(ATTRIB_TEXCOORD0); glGenBuffers(1, &cubeIBO); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cubeIBO); glBufferData(GL_ELEMENT_ARRAY_BUFFER, NUMBER_OF_CUBE_INDICES*sizeof(GLubyte), s_cubeIndices, GL_STATIC_DRAW); 

El set de datos se ve así:

 static float data[] = { // position // // color // //UV// -1.0, +1.0, +1.0, 255,0,0,255, 0,0, -1.0, -1.0, +1.0, 0,255,0,255, 0,0, +1.0, +1.0, +1.0, 255,0,255,255, 0,0, +1.0, -1.0, +1.0, 255,0,0,255, 0,0, +1.0, +1.0, +1.0, 255,0,0,255, 0,0, +1.0, -1.0, +1.0, 255,0,0,255, 0,0, +1.0, +1.0, -1.0, 255,255,0,255, 0,0, +1.0, -1.0, -1.0, 255,0,0,255, 0,0, +1.0, +1.0, -1.0, 255,0,255,255, 0,0, +1.0, -1.0, -1.0, 255,255,0,255, 0,0, -1.0, +1.0, -1.0, 0,255,0,255, 0,0, -1.0, -1.0, -1.0, 255,0,0,255, 0,0, -1.0, +1.0, -1.0, 0,0,255,255, 0,0, -1.0, -1.0, -1.0, 255,0,0,255, 0,0, -1.0, +1.0, +1.0, 255,255,0,255, 0,0, -1.0, -1.0, +1.0, 255,0,0,255, 0,0, }; 

Y este es mi código de renderizado:

 glClearColor(0.5f, 0.5f, 0.5f, 1.0f); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glBindBuffer(GL_ARRAY_BUFFER, cubeVBO); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cubeIBO); glDrawElements(GL_TRIANGLE_STRIP, NUMBER_OF_CUBE_INDICES, GL_UNSIGNED_BYTE, s_cubeIndices); 

También intenté usar la function DrawArrays sin buffer de índice, pero el resultado fue el mismo: no se proporcionó geometry. También hay GLError 1282 en la window de resultados mientras se ejecuta mi progtwig. Agradecería cualquier ayuda sobre mi problema, gracias.

Cuando está utilizando el object de búfer, el último parámetro de glVertexAttribPointer debe compensarse con los datos que necesita. Por ejemplo, la matriz ATTRIB_VERTEX comenzaría en el offset 0, matriz ATTRIB_COLOR en offset sizeof (float) * 3 (porque la position toma tres flotadores), etc.

Cuando no está utilizando objects de búfer, sino matriz de vértices, debe desenlazar el object de búfer enlazado actualmente al objective GL_ARRAY_BUFFER llamando al

 glBindBuffer(GL_ARRAY_BUFFER, 0); 

Ok, lo puse en funcionamiento utilizando las funciones glVertexPointer y glEnableClientState. Pero para glVertexAttribPointer y glEnableVertexAttribArray todavía no hay representación de geometry por alguna razón. Ahora el código se ve así: VBO init:

 struct Vertex { GLfloat x, y, z; GLubyte r, g, b, a; }; ...... const GLsizeiptr data_size = NUMBER_OF_CUBE_VERTICES *sizeof(struct Vertex); glGenBuffers(1, &cubeVBO); glBindBuffer(GL_ARRAY_BUFFER, cubeVBO); glBufferData(GL_ARRAY_BUFFER, data_size, vertices, GL_STATIC_DRAW); glVertexPointer(3, GL_FLOAT, sizeof(struct Vertex), (GLvoid*)((char*)NULL)); glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(struct Vertex), (GLvoid*)offsetof(struct Vertex, r)); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); 

representación:

 glBindBuffer(GL_ARRAY_BUFFER, cubeVBO); glDrawArrays(GL_TRIANGLE_STRIP, 0, NUMBER_OF_CUBE_VERTICES); 

No tengo idea de por qué este código no funciona si cambio a glVertexAttribPointer / glEnableVertexAttribArray. ¿Algunas ideas? ¿Tal vez necesito mover las funciones de apuntar y habilitar desde la parte de initialization hasta la parte de representación?