Быстрая библиотека рисования пикселей - PullRequest
2 голосов
/ 26 ноября 2010

Мое приложение создает «анимацию» для каждого пикселя, поэтому мне нужно эффективно рисовать их. Я пробовал разные стратегии / библиотеки с неудовлетворительными результатами, особенно в более высоких разрешениях.

Вот что я пробовал:

  • SDL: нормально, но медленно;

  • OpenGL: неэффективные операции с пикселями;

  • xlib: лучше, но все еще слишком медленно;

  • svgalib, directfb, (другие реализации буфера кадров): они кажутся идеальными, но определенно слишком сложными для настройки для конечного пользователя.

(ПРИМЕЧАНИЕ: я могу ошибаться в этих утверждениях, если это так, пожалуйста, поправьте меня)

Мне нужно следующее:

  • быстрое пиксельное рисование с характеристиками, сопоставимыми с OpenGL рендерингом;

  • должно работать в Linux (кроссплатформенность в качестве бонуса);

  • он должен поддерживать двойную буферизацию и вертикальную синхронизацию;

  • это должно быть переносимым для оборудования;

  • это должен быть открытый исходный код.

Не могли бы вы дать мне немного просветления / идей / предложений?

Ответы [ 3 ]

4 голосов
/ 26 ноября 2010

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

Основная проблема заключается в том, что графическое оборудование будет сильно отличаться на разных аппаратных платформах. Либо вы выбираете слой абстракции, который замедляет работу, либо код более близок к типу графического оборудования, которое не переносимо.

1 голос
/ 26 ноября 2010

Я не совсем уверен, что вы делаете неправильно, но может случиться так, что вы пишете пиксели по одному на поверхность дисплея.

Не делайте этого.

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

0 голосов
/ 27 ноября 2010

Похоже, вы путаете оконный менеджер (SDL и xlib) с библиотекой рендеринга (opengl).

Просто выберите оконный менеджер (SDL, glut или xlib, если вам нравится вызов), активируйте режим двойного буфера и убедитесь, что вы получили прямой рендеринг.

Какая у вас графическая карта? Скорее всего, он будет обрабатывать пиксели на GPU. Посмотрите, как создавать пиксельные шейдеры в opengl. Пиксельные шейдеры обрабатывают на пиксель.

...