2010-06-28 3 views
2

Мое приложение отображает около 100 отображаемых списков в секунду. Хотя я ожидаю, что это будет интенсивным для gpu, я не понимаю, почему он приносит мой процессор до 80 - 90%. Arn't отображает списки, хранящиеся на графической карте, а не в системной памяти? Что мне нужно сделать, чтобы уменьшить это безумное использование процессора? Мои объекты никогда не меняются, поэтому я использую DL вместо VBO. Но на самом деле моя главная проблема - использование процессора и как я мог его уменьшить. Я отдаю ~ 60 (или пытаюсь) кадров в секунду.Должны ли отображаемые списки быть интенсивными?

Благодаря

ответ

1

Если вы имеете в виде these, то я подозреваю, что узкое место будет связанными с CPU. Все декодирование таких файлов выполняется на CPU. Разумеется, каждая отдельная команда может привести к нескольким командам вашей видеокарты, которая будет выполняться быстро, но процессор застрял, выполняя функцию декодирования.

+0

Я имею в виду GlCallList() – jmasterx

+0

@user: Если это так, то ограничение функции CPU/GPU является специфичным для вендора. Драйверы Microsoft по умолчанию не обеспечивают аппаратное ускорение OpenGL. Я подозреваю, что ваш графический адаптер не обеспечивает такого ускорения - большинство поставщиков потребительских видеокарт игнорируют OpenGL, потому что игры не часто его используют. (Вместо этого они используют Direct3D) –

+0

У меня есть Nvidia 9600 GT, он поддерживает OpenGL 3.0, я обещаю вам, что это действительно аппаратное ускорение – jmasterx

0

У вас, вероятно, отключен VSYNC. В этом случае ваш процессор будет генерировать как можно больше кадров в секунду. Конечно, большинство из них будет потрачено впустую, потому что ваш монитор не может обновлять 100 секунд раз в секунду.

Включите VSYNC и снова проверьте использование процессора (и частоту кадров).

+0

Пробовал, не имел никакого эффекта :-( – jmasterx

0

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

Если вы хотите узнать, где расходуется время процессора, возьмите профайлер и запустите тест выборки граф вызовов. Вы сразу же узнаете, где расходуется процессор.

Смежные вопросы