Быстрый способ рендеринга тысяч bmp во Flash?

#flash #optimization #rendering #alchemy #pixel-bender

#flash #оптимизация #рендеринг #алхимия #сгибание пикселей

Вопрос:

Какой самый быстрый способ отрисовки нескольких десятков растровых изображений размером 16×16 десятки тысяч раз в произвольных местах на экране размером 800×600?

1) Использовать CopyPixel () для переноса каждого спрайта в экранный буфер размером 800 * 600? Конечно, вызывайте unlock(), lock() в экранном буфере.

2) Используя алхимию? На стороне c создайте uint * screenBuffer = new uint[800 * 600]; и создайте много: uint * spriteBmp = new uint[16 * 16]; И скопируйте каждый spriteBmp в тысячи (x, y) местоположений в screenBuffer?

3) Сгибание пикселей?

Кроме того, мне любопытно, какой метод потенциально может использовать аппаратный рендеринг. Т.е., если 1) и 3) могут использовать преимущества пользовательских видеокарт, они должны быть на порядок быстрее, чем любой программный растеризатор, который я создаю с помощью 2).

Мне не нужно масштабирование или поворот для каждого bmp, но мне интересно, не нарушат ли они какие-либо оптимизации as3 API, сделанные для растровых изображений, выровненных по экрану.

Спасибо

Комментарии:

1. В настоящее время ни один из этих методов не использует GPU. Единственный доступ к графическому процессору, который вы можете получить через Flash, — это API Molehill

2. Какую скорость вы получаете с BitmapData.copyPixels? Это намного более простой метод, чем другие, которые вы упомянули. Pixel Bender, вероятно, даже не является приемлемым подходом здесь — вам нужно будет обрабатывать весь экран с его помощью и использовать сложные условия для выбора текстуры и координат в каждом пикселе.

3. Масштабирование или поворот запретят быструю обработку методом BitmapData.draw.

4. @alxx Я получаю отрисовку, возможно, 10k таких растровых изображений с помощью copyPixels (). Это кажется медленным по сравнению с некоторыми движками Flash 3D, которые могут отрисовывать такое количество проецируемых, отображаемых текстурами и преобразованных при сканировании треугольников — намного больше работы, чем мой список 2D-растровых изображений.

5. 10 Тыс. растровых изображений в секунду? Это не медленно. Подход Alchemy был бы намного сложнее, я не могу сказать, будет ли это быстрее, но я сомневаюсь в этом. И PixelBender… Как написать ядро, которое будет отрисовывать сотни текстур за один проход? Забудьте об этом, PB не для этого.

Ответ №1:

Вы пробовали Starling? Это бесплатная библиотека, использующая графический процессор!

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

кстати: Если вы используете то же растровое изображение, это будет еще быстрее!