Самый быстрый способ конвертировать Cairo Surface в Pygame на OS-X - PullRequest
3 голосов
/ 17 августа 2010

Я ищу способ рисовать плавные анимации в Python. Я хочу использовать cairo, отчасти потому, что мне нравится субпиксельная фильтрация, а отчасти потому, что я знаком с API. Моим первым подходом было использование GTK.DrawingArea в качестве цели для поверхности Каира. Хотя рисование было быстрым, я не смог найти надежного способа привязать отображение / буферизацию к вертикальной синхронизации, чтобы анимация была прерывистой и ненадежной.

Мой следующий подход - попробовать PyGame. Используя примеры из wiki в качестве отправной точки, я написал простой код для анимации различных прыгающих шаров. Различные подходы на связанной странице делятся на две категории:

  1. Рисуем за кадром за Каир ImageSurface, а затем использовать Numpy для преобразовать пиксельный буфер в Pygame поверхность.
  2. Совместно используйте одну и ту же память для обоих Поверхности

Первый подход отстой для производительности, так как преобразование занимает около 10 мс, что является большей частью временного интервала, который у меня есть для кадров 60 Гц. Я запускаю код на Macbook-pro с 2,2 ГГц Core2Duo и Nvidia 8400. Время очень зависит от размера поверхности, это для окна 800x800.

Второе сближение поверхностей из упорядочения координат пикселей. И cairo, и pygame настаивают на том, что они могут использовать только порядок пикселей RGB и не поддерживают преобразование. Проблема в том, что когда я настраиваю поверхность пигмея, она использует упорядочение пикселей BGRA, что полностью меня затягивает.

Итак, теперь по вопросам:

  1. Можно ли изменить пиксель формат, используемый любой библиотекой на Mac, чтобы быть совместимым с каждым другой
  2. Если это невозможно, что это самый быстрый способ сделать преобразование чисто на питоне?
  3. Если самый быстрый способ Python по-прежнему сосет большую часть времени для кадр, то как я могу взаимодействовать с какой-нибудь код C для преобразования?
  4. В зависимости от сложности Интерфейс для C, сколько стоит там в использовании Pygame вместо просто пишу интерфейс SDL на C?

.

Ответы [ 2 ]

2 голосов
/ 17 января 2013

Этот учебник также может помочь вам: http://www.pygame.org/wiki/CairoPygame

1 голос
/ 21 апреля 2011

Это может помочь pygame # cairo , squirtle svg pygame

И еще один поток: Рендеринг SVG в приложении PyGame

...