Что может заставить glDrawArrays с VBO ничего не рисовать? - PullRequest
5 голосов
/ 24 октября 2011

Я пытаюсь понять, как работать с VBO, используя контекст рендеринга OpenGL 2.0. У меня настроен 2D (ortho) контекст рендеринга, и я могу нарисовать простой прямоугольник, подобный этому:

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

Но когда я пытаюсь сделать это с VBO, это терпит неудачу. Я настроил VBO следующим образом: те же данные, что и раньше:

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;

и я пытаюсь нарисовать так:

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;

Из всего, что я прочитал, это должно сработать. Я запускаю его через gDEBugger и ошибок GL нет, и данные в VBO загружаются правильно, но на самом деле ничего не появляется, когда я переставляю буферы. Изменение данных в массиве вершин на использование нормализованных координат (с 0..1.0) также приводит к тому, что ничего не отображается. Есть идеи, что я делаю не так? (Предположим, что сам контекст рендеринга настроен правильно и все указатели на функции GL были загружены правильно.)

1 Ответ

6 голосов
/ 24 октября 2011

glDrawArrays(GL_QUADS, 0, 1);

Похоже, вы пытаетесь нарисовать четырехугольник с одной вершиной.Вам нужно еще три:

glDrawArrays(GL_QUADS, 0, 4);

Или перейти к точкам:

glDrawArrays(GL_POINTS, 0, 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...