высокая загрузка процессора при рендеринге - PullRequest
2 голосов
/ 29 мая 2011

Я отрисовываю довольно тяжелый объект, состоящий из около 500 000 треугольников.Я использую список отображения opengl и в методе рендеринга просто вызываю glCallList.Я думал, что как только графические примитивы скомпилированы в список отображения, работа процессора завершена, и он просто говорит gpu рисовать.Но теперь одно ядро ​​процессора загружено до 100%.

Не могли бы вы дать мне несколько подсказок, почему это происходит?

ОБНОВЛЕНИЕ: Я проверил, сколько времени требуется для запуска glCallList, этобыстро, это займет около 30 миллисекунд, чтобы запустить его

Ответы [ 2 ]

1 голос
/ 30 мая 2011

Это что-то вроде мифа о том, что списки волшебным образом выгружают все в GPU. Если бы это было действительно так, текстурные объекты и буферы вершин не нужно было бы добавлять в OpenGL. Весь список отображения на самом деле представляет собой удобный способ воспроизведения последовательности вызовов OpenGL и, возможно, сохранение некоторых затрат на вызов функции / преобразование данных (см. здесь ). Насколько я могу судить, ни одна из реализаций PC HW, которые я использовал, не дала ничего большего, чем это; Может быть, это было иначе во времена рабочих станций SGI, но в наши дни буферные объекты - это путь. (А современные книги по OpenGL, такие как OpenGL Distilled , дают glBegin / glEnd и т. Д. Кратчайшие упоминания только перед тем, как заняться новым материалом).

Единственное место, где я видел списки дисплеев, имеют огромное значение - это случай GLX / X11, когда ваше приложение работает удаленно на вашем дисплее (X11 "сервер"); в этом случае использование списка отображения действительно выдвигает все состояния списка отображения на сторону дисплея только один раз, тогда как приложению немедленного режима без списка отображения необходимо отправлять кучу материала снова каждый кадр, используя намного большую пропускную способность.

Однако, если оставить в стороне списки, вы должны знать о некоторых проблемах, связанных с vsync и занятым ожиданием (или его иллюзией) ... см. этот вопрос / ответ.

1 голос
/ 29 мая 2011

Скорее всего, вы выходите за пределы длины списка, которая составляет 64 тыс. Вершин в каждом списке.Попробуйте разбить ваши 500k треугольников (1500k verteces?) На более мелкие куски и посмотреть, что вы получите.

Кстати, какие графические фишки вы используете?Если вершины обрабатываются на CPU, это также может быть проблемой

...