2011-10-24 13 views
5

Próbuję dowiedzieć się, jak pracować z VBO, przy użyciu kontekstu renderowania OpenGL 2.0. Mam 2D ​​(orto) kontekst renderowania skonfigurować i mogę narysować prosty prostokąt tak:Co może sprawić, że glDrawArrays z VBO niczego nie narysuje?

glBegin(GL_QUADS); 
    glColor4f(1, 1, 1, 1); 
    glVertex2f(0, 0); 
    glVertex2f(0, 10); 
    glVertex2f(100, 10); 
    glVertex2f(100, 0); 
glEnd; 

Ale gdy próbuję zrobić z VBO, to się nie powiedzie. I skonfigurować VBO tak, z tymi samymi danymi jak poprzednio:

procedure initialize; 
const 
    VERTICES: array[1..8] of single = 
    (
    0, 0, 
    0, 10, 
    100, 10, 
    100, 0 
    ); 
begin 
    glEnable(GL_VERTEX_ARRAY); 
    glGenBuffers(1, @VBO); 
    glBindBuffer(GL_ARRAY_BUFFER, VBO); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(VERTICES), @VERTICES[1], GL_DYNAMIC_DRAW); 
    glBindBuffer(GL_ARRAY_BUFFER, 0); 
end; 

i staram się rysować tak:

begin 
    glColor4f(1, 1, 1, 1); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glBindBuffer(GL_ARRAY_BUFFER, VBO); 
    glVertexPointer(2, GL_FLOAT, 0, 0); 
    glDrawArrays(GL_QUADS, 0, 1); 
    glBindBuffer(GL_ARRAY_BUFFER, 0); 
end; 

Od wszystkiego czytałem, że powinno działać. Przepuszczam go przez gDEBugger i nie ma błędów GL, a dane w VBO ładują się poprawnie, ale nic nie pojawia się po zamianie buforów. Zmiana danych w tablicy wierzchołków w celu użycia znormalizowanych współrzędnych (od 0..1.0) również nie wyświetla nic. Masz pojęcie, co robię źle? (Załóżmy kontekst renderowania sama jest prawidłowo skonfigurowany i wskaźników funkcji GL wszystkie zostały prawidłowo załadowany.)

Odpowiedz

6

glDrawArrays(GL_QUADS, 0, 1);

Wygląda na to, że próbujesz narysować quad z jednego wierzchołka. Trzeba jeszcze trzy:

glDrawArrays(GL_QUADS, 0, 4); 

lub przełączanie punktów:

glDrawArrays(GL_POINTS, 0, 1); 
+0

Oh, potrzebuje liczbę wierzchołków? Mój błąd; Myślałem, że potrzebuję liczby ** elementów **, więc starałem się narysować 1 quad. Teraz działa! –

Powiązane problemy