#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? Это бесплатная библиотека, использующая графический процессор!
Вы действительно можете рендерить огромное количество растровых изображений, используя графический процессор.
кстати: Если вы используете то же растровое изображение, это будет еще быстрее!