SUCCESS!!!
package;
import openfl.display.BitmapData;
import openfl.display.Bitmap;
import openfl.display.DisplayObject;
import openfl.display.DisplayObjectShader;
import openfl.display.Shader;
import openfl.display.Sprite;
import openfl.filters.ShaderFilter;
import openfl.filters.BlurFilter;
class Main extends Sprite {
public function new () {
super ();
var mc_starspin_Bitmap = new Bitmap(Assets.getBitmapData("images/eg_starspin.png"));
addChild(mc_starspin_Bitmap);
mc_starspin_Bitmap.x = -75;
mc_starspin_Bitmap.y = -90;
var mask = new Sprite ();
mask.graphics.beginFill (0xFFFFFF);
mask.graphics.drawEllipse (150, 15, 150, 400);
var filter = new BlurFilter(50, 50, 1);
mask.filters = [filter];
applyMask (mc_starspin_Bitmap, mask);
}
private function applyMask (bitmap:Bitmap, mask:DisplayObject):Void {
#if flash
bitmap.mask = mask;
#else
var bitmapDataMask = new BitmapData (bitmap.bitmapData.width, bitmap.bitmapData.height, true, 0x00FFFFFF);
bitmapDataMask.draw (mask);
var shader = new BitmapMaskShader ();
shader.maskImage.input = bitmapDataMask;
bitmap.shader = shader;
#end
}
}
class BitmapMaskShader extends DisplayObjectShader {
@:glFragmentSource("
#pragma header
uniform sampler2D maskImage;
void main(void) {
#pragma body
float mask = texture2D (maskImage, openfl_TextureCoordv).a;
gl_FragColor *= mask;
}
")
public function new () {
super ();
}
}