Почему эффект размытия или свечения не работает в режиме рендеринга на GPU?

Я делаю игру в AS3 с Adobe Flash Pro CC.

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

Если я поставлю CPU или direct, эффекты размытия и свечения работают, но анимация не плавная. (с рендером GPU все очень гладко!)

Знаете ли вы, как я могу использовать эффект размытия и свечения в режиме рендеринга на GPU?

Большое спасибо,

Stephan


Вот что я сделал (но он все еще не работает на реальном устройстве Android):

Мой код был:

private function itemGlow(isGlowing:Boolean):void{
                        if (isGlowing){
                                    var glow:GlowFilter = new GlowFilter();
                                    glow.color = 0xFFFF00;
                                    glow.alpha = .75;
                                    glow.blurX = 10;
                                    glow.blurY = 10;
                                    glow.quality = BitmapFilterQuality.MEDIUM;

                                    draggedItem.filters = [glow];
                        } else {
                                    draggedItem.filters = null;
                        }

И я заменяю его следующим кодом:

public function itemGlow(isGlowing:Boolean):void{
                        if (isGlowing){
                                    var glow:Sprite = new Sprite();
glow.graphics.beginFill(0); // black color
glow.graphics.drawCircle(20, 20, 20);
glow.graphics.endFill();

draggedItem.filters = [new GlowFilter(0xFFFF00, 1)];

var bd:BitmapData = new BitmapData(50, 50, true, 0x00000000);
bd.draw(glow);

var glowbit:Bitmap = new Bitmap(bd);
addChild(glowbit);

                        } else {
                                    draggedItem.filters = null;
                        }

Ошибок нет, свечение видно на симуляторе устройства. Но когда он не работает на реальном устройстве Android....

1 ответ

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

Вот минималистский пример:

// creating a glowing sprite in memory
var glowingSprite:Sprite = new Sprite();
glowingSprite.graphics.beginFill(0); // black color
glowingSprite.graphics.drawCircle(20, 20, 20);
glowingSprite.graphics.endFill();
glowingSprite.filters = [new GlowFilter(0xFFFFFF, 1)];

var bd:BitmapData = new BitmapData(50, 50, true, 0x00000000); // when entering size, usually get the size from glowingSprite.getBounds(), it will return the size with the filter
bd.draw(glowingSprite);

var b:Bitmap = new Bitmap(bd);
addChild(b);

Как вы увидите, теперь вы можете работать с фильтрами и режимами наложения! Если вам нужна анимация, просто создайте массив объектов bitmapData и в объекте bitmap измените свойство bitmapData для каждого кадра.

От Adobe:

При использовании режима визуализации с помощью графического процессора в AIR 2.5 и более поздних версиях существуют следующие ограничения:

  • Фильтры не поддерживаются.

Источник

Другие вопросы по тегам