Last active
April 22, 2019 11:08
-
-
Save mrchnk/064516eee42d1bb2ad2a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function renderWithAlpha(source: DisplayObject, target: BitmapData, tranform: Matrix = null, currentStarling: Starling = null): Boolean { | |
| if (!tranform) { | |
| _helpMatrix.identity(); | |
| tranform = _helpMatrix; | |
| } | |
| var rect: Rectangle = target.rect; | |
| if (!_render(source, target, rect, tranform, 0, 0, null, currentStarling)) { | |
| return false; | |
| } | |
| var alphaBitmap: BitmapData = new BitmapData(target.width, target.height, false); | |
| if (!_render(source, alphaBitmap, rect, tranform, 0xffffff, 1, BlendMode.ERASE)) { | |
| return false; | |
| } | |
| alphaBitmap.applyFilter(alphaBitmap, rect, ZERO_POINT, INVERT_COLOR); | |
| target.copyChannel(alphaBitmap, rect, ZERO_POINT, BitmapDataChannel.RED, BitmapDataChannel.ALPHA); | |
| return true; | |
| } | |
| function _render(source: DisplayObject, target: BitmapData, clip: Rectangle = null, transform: Matrix = null, bgColor: uint = 0, bgAlpha: Number = 0, blendMode: String = null, currentStarling: Starling = null): Boolean { | |
| var mStage: Stage = Starling.current.stage; | |
| var _support: Utils_RenderSupport = _getSupport(); | |
| _support.nextFrame(); | |
| _support.setOrthographicProjection(0, 0, mStage.stageWidth, mStage.stageHeight); | |
| try { | |
| _support.clear(bgColor, bgAlpha); | |
| } catch (err: Error) { | |
| // context is lost | |
| return false; | |
| } | |
| _support.setBlendMode(blendMode ? blendMode : BlendMode.NORMAL); | |
| if (transform) { | |
| _support.pushMatrix(); | |
| _support.prependMatrix(transform); | |
| } | |
| if (clip) { | |
| _support.pushClipRect(clip); | |
| } | |
| source.render(_support, 1); | |
| _support.finishQuadBatch(); | |
| if (clip) { | |
| _support.popClipRect(); | |
| } | |
| Starling.context.drawToBitmapData(target); | |
| return true; | |
| } | |
| class Utils_RenderSupport extends RenderSupport { | |
| public function setBlendMode(mode: String): void { | |
| super.blendMode = mode; | |
| } | |
| public override function get blendMode(): String { | |
| return super.blendMode; | |
| } | |
| public override function set blendMode(value: String): void { | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment