2011-12-23 2 views
1

Я работаю над 3D-игрой в JOGL с моей проектной группой. мы справляемся с проблемами производительности. Наша игра работает со скоростью 20 кадров в секунду или меньше.Проблема с производительностью JOGL

Мы измерили время исключения функции главного дисплея. Это оказалось 4 миллиона секунд, что хорошо. Но, когда мы измеряли время между двумя вызовами дисплея, оно оказалось равным 60 миллисекундам.

Так что вопрос. Что происходит между двумя вызовами дисплея в Opengl?

заранее спасибо

ответ

5

Если JOGL используется в сочетании с AWT, используя GLCanvas затем рендеринга заблокирован в то время как AWT Event диспетчерское Thread выполнять ввод и 2D визуализации.

Если JOGL используется в сочетании с AWT с помощью GLJPanel, то рендеринг блокируется, а поток AWT Event Dispatch Thread выполняет ввод и 2D-рендеринг, а дополнительное время тратится на копирование копий данных из графической памяти графического процессора в память процессора Java2D.

Рекомендация JOGL заключается в непосредственном использовании NEWT GLWindow. NEWT - высокопроизводительный инструментальный инструмент для инсталляции JOGL. NEWT выполняет ввод параллельно с рендерингом OpenGL. Высокопроизводительный рендеринг достигается без блокировки входными событиями или наоборот. http://jogamp.org/jogl/doc/NEWT-Overview.html

1

Я согласен с xranby, но вы не даете достаточно информации о своем проекте.

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

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

Если вы попытаетесь сделать свой ток OpenGL, тогда как это не обязательно, оно может также испортить вашу производительность.

Вы включили функцию v-sync? Используете ли вы FPSAnimator?

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