ho il seguente codice, realizzato per testare solo, come questa è stata una sorta di un bug ho voluto inchiodare:L'applicazione del filtro shader a un oggetto BitmapData ignora il rettangolo passato: come applicare correttamente il filtro shader?
_shader = new Shader(new TheShader() as ByteArray);
_shader.data.width.value = [64.0];
_shader.data.height.value = [64.0];
_shaderFilter = new ShaderFilter(_shader);
_sequence = new Vector.<BitmapData>();
var smallBD:BitmapData;
var i:int;
_delta = new Point();
var megabase:BitmapData = new TheBitmap().bitmapData;
var _rect:Rectangle = new Rectangle(0, 0, 64, 64);
for (i = 0; i < 64; i++) {
smallBD = new BitmapData(64, 64, true, 0x00808080);
//_rect.x = i;
_rect.y = i;
smallBD.applyFilter(megabase, _rect, _delta, _shaderFilter);
_sequence.push(smallBD);
}
Poi ho scorrere _sequence per vedere se cambia rettangolo in realtà fa qualcosa. Non fa nulla, se _shaderFilter è in realtà un filtro shader. Test con uno qualsiasi dei filtri Flash incorporati funziona come previsto, ma con ShaderFilter a volte funziona come se il rettangolo fornito fosse chiaramente sourceBitmapData.rect, qualunque fosse la bitmap di origine, e talvolta si comporta come se non ci fossero dati passati, con il limite di essere situato in una posizione strana - con una bitmap di dimensione 512x384, il bordo della regione passata allo shader è apparentemente situato a (256,192) o al centro della bitmap. Finora sono stato in grado di implementare solo una soluzione alternativa, ovvero copyPixels(), la regione richiesta, quindi applyFilter() in posizione. Qualcuno può provare che è un bug e non sto facendo qualcosa di sbagliato?
PS: Sto utilizzando FlashDevelop con destinazione del progetto Flash Player 10.3 e non so se FP11 risolve questo problema.
Grazie per aver tentato un test indipendente! Hai provato a compilarlo con il target FP11 e controllare se funziona allo stesso modo? – Vesper
@Vesper Sì, l'ho provato il 10 e 11. Lo stesso risultato in entrambi (lo screenshot è da 11) – Dave