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.)
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! –