2009-08-02 11 views
6

Po prostu próbowałem renderować pierwszy przykład redbook (biały Quad) za pomocą VBO.
To działa dobrze z trybem natychmiastowym i tablicami wierzchołków.Problem z korzystaniem z OpenGL VBO

Jednak podczas korzystania z VBO ekran pozostaje czarny. Chyba przegapiłem coś ważnego.

startowych:

unsigned int bufIds[2]; 
glGenBuffers(2, bufIds); 
GLfloat vertices[] = { 
    0.25, 0.25, 0.0, 
    0.75, 0.25, 0.0, 
    0.75, 0.75, 0.0, 
    0.25, 0.75, 0.0 
}; 
glBindBuffer(GL_ARRAY_BUFFER, bufIds[0]); 
glBufferData(GL_ARRAY_BUFFER, 12, vertices, GL_STATIC_DRAW); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

glClearColor(0, 0, 0, 1); 
glColor3f(1, 1, 1); 
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 

renderloop dla VBO (nie działa):

glClear(GL_COLOR_BUFFER_BIT); 
glEnableClientState(GL_VERTEX_ARRAY); 
glBindBuffer(GL_ARRAY_BUFFER, bufIds[0]); 
glVertexPointer(3, GL_FLOAT, 0, 0); 
glDrawArrays(GL_QUADS, 0, 12); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 
glDisableClientState(GL_VERTEX_ARRAY); 

renderloop dla tablic wierzchołków (robocza):

glClear(GL_COLOR_BUFFER_BIT); 
glEnableClientState(GL_VERTEX_ARRAY); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
glDrawArrays(GL_QUADS, 0, 12); 
glDisableClientState(GL_VERTEX_ARRAY); 

Odpowiedz

5

argh Właśnie zorientowaliśmy się przez próbuje odczytać zawartość bufora:

muszę przeznaczyć bufor z 12 * sizeof (GLfloat) zamiast tylko 12

glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(GLfloat), vertices, GL_STATIC_DRAW); 

mój odczytany kod

GLfloat vertices2[12]; 
glBindBuffer(GL_ARRAY_BUFFER, bufIds[0]); 
glGetBufferSubData (GL_ARRAY_BUFFER, 0, 12 * sizeof(GLfloat), vertices2); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

for (int i = 0; i < 4; i ++) { 
    LOG_DEBUG << "point " << i << ": " << vertices2[ i * 3 + 0 ] << "/" << vertices2[ i * 3 + 1 ] << "/" << vertices2[ i * 3 + 2 ]; 
} 
+0

+1 Awesome! Miałem dokładnie ten sam problem, dziękuję bardzo! –