Как я могу улучшить производительность с пакетами, используя pyglet? - PullRequest
2 голосов
/ 22 декабря 2010

У меня есть код, который создает пакет, используя библиотеку pyglet. Вся вещь содержит около 10 000 квадов при полной загрузке. Теперь, когда я запускаю скрипт, который рендерит всю сцену (это полностью статичная сцена), я получаю 3FPS. Единственное, что в прототипе, который я использовал для рендеринга сцены, я построил карту, используя некоторый медленный и неаккуратный код на python, который также работал на 3FPS ​​для той же самой сцены. Поскольку пакеты в pyglet управляются с помощью C ++, у меня возникает беспокойное чувство, что мне не хватает чего-то очевидного, что приводит к тому, что пакет обрабатывает со скоростью 3FPS.

Это код инициализации моей сцены:

glViewport(0, 0, width, height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60.0, float(width)/height, .1, 10000.)
glMatrixMode(GL_MODELVIEW)
glClearColor(94.0/255.0, 161.0/255.0, 255.0/255.0, 0.5)
glClearDepth(1.0)
glShadeModel(GL_FLAT)
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LEQUAL)  
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

И вот код, который запускает каждый кадр для визуализации сцены:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glTranslatef(0, 0, -1*self.mapZoomLevel)
glRotatef(self.mapPitch/5, 1, 0, 0)
glRotatef(self.mapRotation, 0, 0, 1)
glTranslatef(self.mapX, self.mapY, 0)
self.mapPrimitive.batch.draw()

Ответы [ 2 ]

1 голос
/ 05 апреля 2013

Для этого есть ярлык, если вы используете CPython.Pypy некоторое время поддерживал pyglet (http://pypy.org/compat.html). Переключившись на Pypy, вы можете легко улучшить производительность, и в принципе нет необходимости изменять код. Надеюсь, он вам пригодится.

0 голосов
/ 13 февраля 2012

Если сцена статическая, ее следует легко исправить с помощью списка отображения. Некоторые поставщики оптимизируют списки отображения, конвертируя их в VBO и glMultiDrawElements () для внутреннего использования, поэтому у некоторых паршивых квадратов по 10 тыс. Проблем не должно быть. И это как четыре строки кода.

...