Почему эффект размытия или свечения не работает в режиме рендеринга на 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 и более поздних версиях существуют следующие ограничения:
- Фильтры не поддерживаются.