Выполняет ли OpenGL список отображения данные glVertex?

Некоторое время я использовал OpenGL в простом непосредственном режиме и пытаюсь перейти в режим сохранения со списками отображения (которые, к сожалению, я узнал, устарела некоторое время). Что я хотел бы знать, это когда я печатаю:

glNewList(list, GL_COMPILE);
glBegin(GL_TRIANGLE_FAN);
glVertex2f(0.0f, 0.0f);
for (int i = 0; i < 10; i++)
{
glVertex2f(radius * cos(i * 2.0f * PI / 9.0f), radius * sin(i * 2.0f * PI / 9.0f));
}
glEnd();
glEndList();

делает ли OpenGL предварительный расчет всех 10 вершин в цикле for и отправляет их на запеченную видеокарту, например:

glVertex2f(0.5f, 0.0f);
glVertex2f(0.499f, 0.0055f);
//so and so forth 10 times...

или он пытается выполнить цикл for (и много операций sin / cos) для каждого кадра? Другими словами, разумно ли хранить такую ​​круглую форму в списках отображения (и делать все остальное с помощью glTranslatef, glRotatef и т. Д.), Чтобы избежать тригонометрических операций при каждом обновлении кадра, или вообще никакого выигрыша в производительности нет?

Изменить: чтобы избежать путаницы, я намерен создать этот список отображения один раз, используя цикл for, а затем вызвать его glCallList (список) в каждом обновлении кадра (т.е. glutDisplayFunc ()). Я не создаю список для каждого кадра.

1

Решение

Только последовательность команд GL и параметры «запекаются» в списке отображения. В противном случае OpenGL пришлось бы использовать какой-то ужас longjmp() чудовище, чтобы повторно выполнить (наряду с полный состояние процесса в этот момент!) код между glNewList()/glEndList(),

3

Другие решения

Списки отображения (и рендеринг непосредственного режима, для которого это предусмотрено) — это устаревшая функциональность, и базовая механика была за драйвером, некоторые могут возвращать его в вызов массивов отрисовки, в то время как другие просто воспроизводили вызовы с полученными параметрами, не вашего кода на самом деле повторно выполняется.

Вместо этого вы должны сделать запекание явно, поместив данные в VBO и использовать glDrawArrays,

5

По вопросам рекламы [email protected]