これは私が釘付けにしたい一種のバグだったので、テスト専用に作成された次のコードがあります。
_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);
}
次に、長方形の変更が実際に何かを行うかどうかを確認するために、_sequence を循環します。_shaderFilter が実際にシェーダー フィルターである場合、何もしません。組み込みの Flash フィルタを使用したテストは意図したとおりに機能しますが、ShaderFilter を使用すると、ソース ビットマップが何であれ、提供された四角形が単純に sourceBitmapData.rect であるかのように機能することがあり、データが渡されていないように動作し、境界が奇妙な位置にあります - サイズが 512x384 のビットマップでは、シェーダーに渡された領域の端が (256,192) またはビットマップの中心にあるようです。これまでのところ、回避策を実装することしかできませんでした。つまり、最初に必要な領域を copyPixels() し、次に applyFilter() を配置しました。誰かがそれがバグであり、私が何か間違ったことをしていないことを証明できますか?
PS: プロジェクト ターゲットが Flash Player 10.3 の FlashDevelop を使用していますが、FP11 でこれが修正されるかどうかはわかりません。