openfl
Version:
A fast, productive library for 2D cross-platform development.
616 lines (599 loc) • 27.2 kB
JavaScript
// Class: openfl.display.DisplayObjectRenderer
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../hxClasses_stub").default;
var $hxEnums = require("./../../hxEnums_stub").default;
var $import = require("./../../import_stub").default;
var $extend = require("./../../extend_stub").default;
function openfl_events_EventDispatcher() {return require("./../../openfl/events/EventDispatcher");}
function openfl_display__$internal_Context3DGraphics() {return require("./../../openfl/display/_internal/Context3DGraphics");}
function openfl_geom_ColorTransform() {return require("./../../openfl/geom/ColorTransform");}
function openfl_geom_Matrix() {return require("./../../openfl/geom/Matrix");}
function openfl_geom_Rectangle() {return require("./../../openfl/geom/Rectangle");}
function openfl_display_BitmapData() {return require("./../../openfl/display/BitmapData");}
function openfl_display_Bitmap() {return require("./../../openfl/display/Bitmap");}
function openfl_display_OpenGLRenderer() {return require("./../../openfl/display/OpenGLRenderer");}
function js_Boot() {return require("./../../js/Boot");}
function lime__$internal_graphics_ImageCanvasUtil() {return require("./../../lime/_internal/graphics/ImageCanvasUtil");}
function openfl_display_CanvasRenderer() {return require("./../../openfl/display/CanvasRenderer");}
function openfl_geom_Point() {return require("./../../openfl/geom/Point");}
// Constructor
var DisplayObjectRenderer = function() {
(openfl_events_EventDispatcher().default).call(this);
this.__allowSmoothing = true;
this.__pixelRatio = 1;
this.__tempColorTransform = new (openfl_geom_ColorTransform().default)();
this.__worldAlpha = 1;
}
// Meta
DisplayObjectRenderer.__name__ = "openfl.display.DisplayObjectRenderer";
DisplayObjectRenderer.__isInterface__ = false;
DisplayObjectRenderer.__super__ = (openfl_events_EventDispatcher().default);
DisplayObjectRenderer.prototype = $extend((openfl_events_EventDispatcher().default).prototype, {
__clear: function() {
},
__getAlpha: function(value) {
return value * this.__worldAlpha;
},
__getColorTransform: function(value) {
if(this.__worldColorTransform != null) {
this.__tempColorTransform.__copyFrom(this.__worldColorTransform);
this.__tempColorTransform.__combine(value);
return this.__tempColorTransform;
} else {
return value;
}
},
__popMask: function() {
},
__popMaskObject: function(object,handleScrollRect) {
if(handleScrollRect == null) {
handleScrollRect = true;
}
},
__popMaskRect: function() {
},
__pushMask: function(mask) {
},
__pushMaskObject: function(object,handleScrollRect) {
if(handleScrollRect == null) {
handleScrollRect = true;
}
},
__pushMaskRect: function(rect,transform) {
},
__render: function(object) {
},
__renderEvent: function(displayObject) {
var renderer = this;
if(displayObject.__customRenderEvent != null && displayObject.__renderable) {
displayObject.__customRenderEvent.allowSmoothing = renderer.__allowSmoothing;
displayObject.__customRenderEvent.objectMatrix.copyFrom(displayObject.__renderTransform);
displayObject.__customRenderEvent.objectColorTransform.__copyFrom(displayObject.__worldColorTransform);
displayObject.__customRenderEvent.renderer = renderer;
switch(renderer.__type) {
case "cairo":
displayObject.__customRenderEvent.type = "renderCairo";
break;
case "canvas":
displayObject.__customRenderEvent.type = "renderCanvas";
break;
case "dom":
if(displayObject.stage != null && displayObject.__worldVisible) {
displayObject.__customRenderEvent.type = "renderDOM";
} else {
displayObject.__customRenderEvent.type = "clearDOM";
}
break;
case "opengl":
if(!renderer.__cleared) {
renderer.__clear();
}
var renderer1 = renderer;
renderer1.setShader(displayObject.__worldShader);
renderer1.__context3D.__flushGL();
displayObject.__customRenderEvent.type = "renderOpenGL";
break;
default:
return;
}
renderer.__setBlendMode(displayObject.__worldBlendMode);
renderer.__pushMaskObject(displayObject);
displayObject.dispatchEvent(displayObject.__customRenderEvent);
renderer.__popMaskObject(displayObject);
if(renderer.__type == "opengl") {
var renderer2 = renderer;
renderer2.setViewport();
}
}
},
__resize: function(width,height) {
},
__setBlendMode: function(value) {
},
__shouldCacheHardware: function(displayObject,value) {
if(displayObject == null) {
return null;
}
switch(displayObject.__drawableType) {
case 4:case 5:
if(value == true) {
return true;
}
value = this.__shouldCacheHardware_DisplayObject(displayObject,value);
if(value == true) {
return true;
}
if(displayObject.__children != null) {
var _g = 0;
var _g1 = displayObject.__children;
while(_g < _g1.length) {
var child = _g1[_g];
++_g;
value = this.__shouldCacheHardware_DisplayObject(child,value);
if(value == true) {
return true;
}
}
}
return value;
case 7:
if(value == true) {
return true;
} else {
return false;
}
break;
case 9:
return true;
default:
return this.__shouldCacheHardware_DisplayObject(displayObject,value);
}
},
__shouldCacheHardware_DisplayObject: function(displayObject,value) {
if(value == true || displayObject.__filters != null) {
return true;
}
if(value == false || displayObject.__graphics != null && !(openfl_display__$internal_Context3DGraphics().default).isCompatible(displayObject.__graphics)) {
return false;
}
return null;
},
__updateCacheBitmap: function(displayObject,force) {
if(displayObject == null) {
return false;
}
var renderer = this;
switch(displayObject.__drawableType) {
case 2:
var bitmap = displayObject;
if(bitmap.__bitmapData == null || bitmap.__filters == null && renderer.__type == "opengl" && bitmap.__cacheBitmap == null) {
return false;
}
force = bitmap.__bitmapData.image != null && bitmap.__bitmapData.image.version != bitmap.__imageVersion;
break;
case 7:
var textField = displayObject;
if(textField.__filters == null && renderer.__type == "opengl" && textField.__cacheBitmap == null && !textField.__domRender) {
return false;
}
if(force) {
textField.__renderDirty = true;
}
force = force || textField.__dirty;
break;
case 9:
var tilemap = displayObject;
if(tilemap.__filters == null && renderer.__type == "opengl" && tilemap.__cacheBitmap == null) {
return false;
}
break;
default:
}
if(displayObject.__isCacheBitmapRender) {
return false;
}
var colorTransform = (openfl_geom_ColorTransform().default).__pool.get();
colorTransform.__copyFrom(displayObject.__worldColorTransform);
if(renderer.__worldColorTransform != null) {
colorTransform.__combine(renderer.__worldColorTransform);
}
var updated = false;
if(displayObject.get_cacheAsBitmap() || renderer.__type != "opengl" && !colorTransform.__isDefault(true)) {
var rect = null;
var needRender = displayObject.__cacheBitmap == null || displayObject.__renderDirty && (force || displayObject.__children != null && displayObject.__children.length > 0) || displayObject.opaqueBackground != displayObject.__cacheBitmapBackground;
var softwareDirty = needRender || displayObject.__graphics != null && displayObject.__graphics.__softwareDirty || !displayObject.__cacheBitmapColorTransform.__equals(colorTransform,true);
var hardwareDirty = needRender || displayObject.__graphics != null && displayObject.__graphics.__hardwareDirty;
var renderType = renderer.__type;
if(softwareDirty || hardwareDirty) {
if(renderType == "opengl") {
if(this.__shouldCacheHardware(displayObject,null) == false) {
renderType = "canvas";
}
}
if(softwareDirty && (renderType == "canvas" || renderType == "cairo")) {
needRender = true;
}
if(hardwareDirty && renderType == "opengl") {
needRender = true;
}
}
var updateTransform = needRender || !displayObject.__cacheBitmap.__worldTransform.equals(displayObject.__worldTransform);
var hasFilters = displayObject.__filters != null;
if(renderer.__type == "dom" && !hasFilters) {
return false;
}
if(hasFilters && !needRender) {
var _g1 = 0;
var _g2 = displayObject.__filters;
while(_g1 < _g2.length) {
var filter = _g2[_g1];
++_g1;
if(filter.__renderDirty) {
needRender = true;
break;
}
}
}
if(displayObject.__cacheBitmapMatrix == null) {
displayObject.__cacheBitmapMatrix = new (openfl_geom_Matrix().default)();
}
var bitmapMatrix = displayObject.__cacheAsBitmapMatrix != null ? displayObject.__cacheAsBitmapMatrix : displayObject.__renderTransform;
if(!needRender && (bitmapMatrix.a != displayObject.__cacheBitmapMatrix.a || bitmapMatrix.b != displayObject.__cacheBitmapMatrix.b || bitmapMatrix.c != displayObject.__cacheBitmapMatrix.c || bitmapMatrix.d != displayObject.__cacheBitmapMatrix.d)) {
needRender = true;
}
if(!needRender && renderer.__type != "opengl" && displayObject.__cacheBitmapData != null && displayObject.__cacheBitmapData.image != null && displayObject.__cacheBitmapData.image.version < displayObject.__cacheBitmapData.__textureVersion) {
needRender = true;
}
if(!needRender) {
var current = displayObject;
while(current != null) {
if(current.get_scrollRect() != null) {
updateTransform = true;
break;
}
current = current.parent;
}
}
displayObject.__cacheBitmapMatrix.copyFrom(bitmapMatrix);
displayObject.__cacheBitmapMatrix.tx = 0;
displayObject.__cacheBitmapMatrix.ty = 0;
var bitmapWidth = 0;
var bitmapHeight = 0;
var filterWidth = 0;
var filterHeight = 0;
var offsetX = 0.;
var offsetY = 0.;
var pixelRatio = this.__pixelRatio;
if(updateTransform || needRender) {
rect = (openfl_geom_Rectangle().default).__pool.get();
displayObject.__getFilterBounds(rect,displayObject.__cacheBitmapMatrix);
filterWidth = rect.width > 0 ? Math.ceil((rect.width + 1) * pixelRatio) : 0;
filterHeight = rect.height > 0 ? Math.ceil((rect.height + 1) * pixelRatio) : 0;
offsetX = rect.x > 0 ? Math.ceil(rect.x) : Math.floor(rect.x);
offsetY = rect.y > 0 ? Math.ceil(rect.y) : Math.floor(rect.y);
if(displayObject.__cacheBitmapData != null) {
if(filterWidth > displayObject.__cacheBitmapData.width || filterHeight > displayObject.__cacheBitmapData.height) {
bitmapWidth = Math.ceil(Math.max(filterWidth * 1.25,displayObject.__cacheBitmapData.width));
bitmapHeight = Math.ceil(Math.max(filterHeight * 1.25,displayObject.__cacheBitmapData.height));
needRender = true;
} else {
bitmapWidth = displayObject.__cacheBitmapData.width;
bitmapHeight = displayObject.__cacheBitmapData.height;
}
} else {
bitmapWidth = filterWidth;
bitmapHeight = filterHeight;
}
}
if(needRender) {
updateTransform = true;
displayObject.__cacheBitmapBackground = displayObject.opaqueBackground;
if(filterWidth >= 0.5 && filterHeight >= 0.5) {
var needsFill = displayObject.opaqueBackground != null && (bitmapWidth != filterWidth || bitmapHeight != filterHeight);
var fillColor = displayObject.opaqueBackground != null ? -16777216 | displayObject.opaqueBackground : 0;
var bitmapColor = needsFill ? 0 : fillColor;
var allowFramebuffer = renderer.__type == "opengl";
if(displayObject.__cacheBitmapData == null || bitmapWidth > displayObject.__cacheBitmapData.width || bitmapHeight > displayObject.__cacheBitmapData.height) {
displayObject.__cacheBitmapData = new (openfl_display_BitmapData().default)(bitmapWidth,bitmapHeight,true,bitmapColor);
if(displayObject.__cacheBitmap == null) {
displayObject.__cacheBitmap = new (openfl_display_Bitmap().default)();
}
displayObject.__cacheBitmap.__bitmapData = displayObject.__cacheBitmapData;
displayObject.__cacheBitmapRenderer = null;
} else {
displayObject.__cacheBitmapData.__fillRect(displayObject.__cacheBitmapData.rect,bitmapColor,allowFramebuffer);
}
if(needsFill) {
rect.setTo(0,0,filterWidth,filterHeight);
displayObject.__cacheBitmapData.__fillRect(rect,fillColor,allowFramebuffer);
}
} else {
(openfl_geom_ColorTransform().default).__pool.release(colorTransform);
displayObject.__cacheBitmap = null;
displayObject.__cacheBitmapData = null;
displayObject.__cacheBitmapData2 = null;
displayObject.__cacheBitmapData3 = null;
displayObject.__cacheBitmapRenderer = null;
if(displayObject.__drawableType == 7) {
var textField1 = displayObject;
if(textField1.__cacheBitmap != null) {
textField1.__cacheBitmap.__renderTransform.tx -= textField1.__offsetX * pixelRatio;
textField1.__cacheBitmap.__renderTransform.ty -= textField1.__offsetY * pixelRatio;
}
}
return true;
}
} else {
displayObject.__cacheBitmapData = displayObject.__cacheBitmap.get_bitmapData();
displayObject.__cacheBitmapData2 = null;
displayObject.__cacheBitmapData3 = null;
}
if(updateTransform || needRender) {
displayObject.__cacheBitmap.__worldTransform.copyFrom(displayObject.__worldTransform);
if(bitmapMatrix == displayObject.__renderTransform) {
displayObject.__cacheBitmap.__renderTransform.identity();
displayObject.__cacheBitmap.__renderTransform.scale(1 / pixelRatio,1 / pixelRatio);
displayObject.__cacheBitmap.__renderTransform.tx = displayObject.__renderTransform.tx + offsetX;
displayObject.__cacheBitmap.__renderTransform.ty = displayObject.__renderTransform.ty + offsetY;
} else {
displayObject.__cacheBitmap.__renderTransform.copyFrom(displayObject.__cacheBitmapMatrix);
displayObject.__cacheBitmap.__renderTransform.invert();
displayObject.__cacheBitmap.__renderTransform.concat(displayObject.__renderTransform);
displayObject.__cacheBitmap.__renderTransform.a *= 1 / pixelRatio;
displayObject.__cacheBitmap.__renderTransform.d *= 1 / pixelRatio;
displayObject.__cacheBitmap.__renderTransform.tx += offsetX;
displayObject.__cacheBitmap.__renderTransform.ty += offsetY;
}
}
displayObject.__cacheBitmap.smoothing = renderer.__allowSmoothing;
displayObject.__cacheBitmap.__renderable = displayObject.__renderable;
displayObject.__cacheBitmap.__worldAlpha = displayObject.__worldAlpha;
displayObject.__cacheBitmap.__worldBlendMode = displayObject.__worldBlendMode;
displayObject.__cacheBitmap.__worldShader = displayObject.__worldShader;
displayObject.__cacheBitmap.set_mask(displayObject.__mask);
if(needRender) {
if(displayObject.__cacheBitmapRenderer == null || renderType != displayObject.__cacheBitmapRenderer.__type) {
if(renderType == "opengl") {
displayObject.__cacheBitmapRenderer = new (openfl_display_OpenGLRenderer().default)(((js_Boot().default).__cast(renderer , (openfl_display_OpenGLRenderer().default))).__context3D,displayObject.__cacheBitmapData);
} else {
if(displayObject.__cacheBitmapData.image == null) {
var color = displayObject.opaqueBackground != null ? -16777216 | displayObject.opaqueBackground : 0;
displayObject.__cacheBitmapData = new (openfl_display_BitmapData().default)(bitmapWidth,bitmapHeight,true,color);
displayObject.__cacheBitmap.__bitmapData = displayObject.__cacheBitmapData;
}
(lime__$internal_graphics_ImageCanvasUtil().default).convertToCanvas(displayObject.__cacheBitmapData.image);
displayObject.__cacheBitmapRenderer = new (openfl_display_CanvasRenderer().default)(displayObject.__cacheBitmapData.image.buffer.__srcContext);
}
displayObject.__cacheBitmapRenderer.__worldTransform = new (openfl_geom_Matrix().default)();
displayObject.__cacheBitmapRenderer.__worldColorTransform = new (openfl_geom_ColorTransform().default)();
}
if(displayObject.__cacheBitmapColorTransform == null) {
displayObject.__cacheBitmapColorTransform = new (openfl_geom_ColorTransform().default)();
}
displayObject.__cacheBitmapRenderer.__stage = displayObject.stage;
displayObject.__cacheBitmapRenderer.__allowSmoothing = renderer.__allowSmoothing;
displayObject.__cacheBitmapRenderer.__setBlendMode("normal");
displayObject.__cacheBitmapRenderer.__worldAlpha = 1 / displayObject.__worldAlpha;
displayObject.__cacheBitmapRenderer.__worldTransform.copyFrom(displayObject.__renderTransform);
displayObject.__cacheBitmapRenderer.__worldTransform.invert();
displayObject.__cacheBitmapRenderer.__worldTransform.concat(displayObject.__cacheBitmapMatrix);
displayObject.__cacheBitmapRenderer.__worldTransform.tx -= offsetX;
displayObject.__cacheBitmapRenderer.__worldTransform.ty -= offsetY;
displayObject.__cacheBitmapRenderer.__worldTransform.scale(pixelRatio,pixelRatio);
displayObject.__cacheBitmapRenderer.__pixelRatio = pixelRatio;
displayObject.__cacheBitmapRenderer.__worldColorTransform.__copyFrom(colorTransform);
displayObject.__cacheBitmapRenderer.__worldColorTransform.__invert();
displayObject.__isCacheBitmapRender = true;
if(displayObject.__cacheBitmapRenderer.__type == "opengl") {
var parentRenderer = renderer;
var childRenderer = displayObject.__cacheBitmapRenderer;
var context = childRenderer.__context3D;
var cacheRTT = context.__state.renderToTexture;
var cacheRTTDepthStencil = context.__state.renderToTextureDepthStencil;
var cacheRTTAntiAlias = context.__state.renderToTextureAntiAlias;
var cacheRTTSurfaceSelector = context.__state.renderToTextureSurfaceSelector;
var cacheBlendMode = parentRenderer.__blendMode;
parentRenderer.__suspendClipAndMask();
childRenderer.__copyShader(parentRenderer);
displayObject.__cacheBitmapData.__setUVRect(context,0,0,filterWidth,filterHeight);
childRenderer.__setRenderTarget(displayObject.__cacheBitmapData);
if(displayObject.__cacheBitmapData.image != null) {
displayObject.__cacheBitmapData.__textureVersion = displayObject.__cacheBitmapData.image.version + 1;
}
displayObject.__cacheBitmapData.__drawGL(displayObject,childRenderer);
if(hasFilters) {
var needSecondBitmapData = true;
var needCopyOfOriginal = false;
var _g11 = 0;
var _g21 = displayObject.__filters;
while(_g11 < _g21.length) {
var filter1 = _g21[_g11];
++_g11;
if(filter1.__preserveObject) {
needCopyOfOriginal = true;
}
}
var bitmap1 = displayObject.__cacheBitmapData;
var bitmap2 = null;
var bitmap3 = null;
if(displayObject.__cacheBitmapData2 == null || bitmapWidth > displayObject.__cacheBitmapData2.width || bitmapHeight > displayObject.__cacheBitmapData2.height) {
displayObject.__cacheBitmapData2 = new (openfl_display_BitmapData().default)(bitmapWidth,bitmapHeight,true,0);
} else {
displayObject.__cacheBitmapData2.fillRect(displayObject.__cacheBitmapData2.rect,0);
if(displayObject.__cacheBitmapData2.image != null) {
displayObject.__cacheBitmapData2.__textureVersion = displayObject.__cacheBitmapData2.image.version + 1;
}
}
displayObject.__cacheBitmapData2.__setUVRect(context,0,0,filterWidth,filterHeight);
bitmap2 = displayObject.__cacheBitmapData2;
if(needCopyOfOriginal) {
if(displayObject.__cacheBitmapData3 == null || bitmapWidth > displayObject.__cacheBitmapData3.width || bitmapHeight > displayObject.__cacheBitmapData3.height) {
displayObject.__cacheBitmapData3 = new (openfl_display_BitmapData().default)(bitmapWidth,bitmapHeight,true,0);
} else {
displayObject.__cacheBitmapData3.fillRect(displayObject.__cacheBitmapData3.rect,0);
if(displayObject.__cacheBitmapData3.image != null) {
displayObject.__cacheBitmapData3.__textureVersion = displayObject.__cacheBitmapData3.image.version + 1;
}
}
displayObject.__cacheBitmapData3.__setUVRect(context,0,0,filterWidth,filterHeight);
bitmap3 = displayObject.__cacheBitmapData3;
}
childRenderer.__setBlendMode("normal");
childRenderer.__worldAlpha = 1;
childRenderer.__worldTransform.identity();
childRenderer.__worldColorTransform.__identity();
var shader;
var cacheBitmap;
var _g3 = 0;
var _g4 = displayObject.__filters;
while(_g3 < _g4.length) {
var filter2 = _g4[_g3];
++_g3;
if(filter2.__preserveObject) {
childRenderer.__setRenderTarget(bitmap3);
childRenderer.__renderFilterPass(bitmap1,childRenderer.__defaultDisplayShader,filter2.__smooth);
}
var _g31 = 0;
var _g41 = filter2.__numShaderPasses;
while(_g31 < _g41) {
var i = _g31++;
shader = filter2.__initShader(childRenderer,i,filter2.__preserveObject ? bitmap3 : null);
childRenderer.__setBlendMode(filter2.__shaderBlendMode);
childRenderer.__setRenderTarget(bitmap2);
childRenderer.__renderFilterPass(bitmap1,shader,filter2.__smooth);
cacheBitmap = bitmap1;
bitmap1 = bitmap2;
bitmap2 = cacheBitmap;
}
filter2.__renderDirty = false;
}
displayObject.__cacheBitmap.__bitmapData = bitmap1;
}
parentRenderer.__blendMode = "normal";
parentRenderer.__setBlendMode(cacheBlendMode);
parentRenderer.__copyShader(childRenderer);
if(cacheRTT != null) {
context.setRenderToTexture(cacheRTT,cacheRTTDepthStencil,cacheRTTAntiAlias,cacheRTTSurfaceSelector);
} else {
context.setRenderToBackBuffer();
}
parentRenderer.__resumeClipAndMask(childRenderer);
parentRenderer.setViewport();
displayObject.__cacheBitmapColorTransform.__copyFrom(colorTransform);
} else {
displayObject.__cacheBitmapData.__drawCanvas(displayObject,displayObject.__cacheBitmapRenderer);
if(hasFilters) {
var needSecondBitmapData1 = false;
var needCopyOfOriginal1 = false;
var _g12 = 0;
var _g22 = displayObject.__filters;
while(_g12 < _g22.length) {
var filter3 = _g22[_g12];
++_g12;
if(filter3.__needSecondBitmapData) {
needSecondBitmapData1 = true;
}
if(filter3.__preserveObject) {
needCopyOfOriginal1 = true;
}
}
var bitmap4 = displayObject.__cacheBitmapData;
var bitmap21 = null;
var bitmap31 = null;
if(needSecondBitmapData1) {
if(displayObject.__cacheBitmapData2 == null || displayObject.__cacheBitmapData2.image == null || bitmapWidth > displayObject.__cacheBitmapData2.width || bitmapHeight > displayObject.__cacheBitmapData2.height) {
displayObject.__cacheBitmapData2 = new (openfl_display_BitmapData().default)(bitmapWidth,bitmapHeight,true,0);
} else {
displayObject.__cacheBitmapData2.fillRect(displayObject.__cacheBitmapData2.rect,0);
}
bitmap21 = displayObject.__cacheBitmapData2;
} else {
bitmap21 = bitmap4;
}
if(needCopyOfOriginal1) {
if(displayObject.__cacheBitmapData3 == null || displayObject.__cacheBitmapData3.image == null || bitmapWidth > displayObject.__cacheBitmapData3.width || bitmapHeight > displayObject.__cacheBitmapData3.height) {
displayObject.__cacheBitmapData3 = new (openfl_display_BitmapData().default)(bitmapWidth,bitmapHeight,true,0);
} else {
displayObject.__cacheBitmapData3.fillRect(displayObject.__cacheBitmapData3.rect,0);
}
bitmap31 = displayObject.__cacheBitmapData3;
}
if(displayObject.__tempPoint == null) {
displayObject.__tempPoint = new (openfl_geom_Point().default)();
}
var destPoint = displayObject.__tempPoint;
var cacheBitmap1;
var lastBitmap;
var _g32 = 0;
var _g42 = displayObject.__filters;
while(_g32 < _g42.length) {
var filter4 = _g42[_g32];
++_g32;
if(filter4.__preserveObject) {
bitmap31.copyPixels(bitmap4,bitmap4.rect,destPoint);
}
lastBitmap = filter4.__applyFilter(bitmap21,bitmap4,bitmap4.rect,destPoint);
if(filter4.__preserveObject) {
lastBitmap.draw(bitmap31,null,displayObject.__objectTransform != null ? displayObject.__objectTransform.__colorTransform : null);
}
filter4.__renderDirty = false;
if(needSecondBitmapData1 && lastBitmap == bitmap21) {
cacheBitmap1 = bitmap4;
bitmap4 = bitmap21;
bitmap21 = cacheBitmap1;
}
}
if(displayObject.__cacheBitmapData != bitmap4) {
cacheBitmap1 = displayObject.__cacheBitmapData;
displayObject.__cacheBitmapData = bitmap4;
displayObject.__cacheBitmapData2 = cacheBitmap1;
displayObject.__cacheBitmap.__bitmapData = displayObject.__cacheBitmapData;
displayObject.__cacheBitmapRenderer = null;
}
displayObject.__cacheBitmap.__imageVersion = displayObject.__cacheBitmapData.__textureVersion;
}
displayObject.__cacheBitmapColorTransform.__copyFrom(colorTransform);
if(!displayObject.__cacheBitmapColorTransform.__isDefault(true)) {
displayObject.__cacheBitmapColorTransform.alphaMultiplier = 1;
displayObject.__cacheBitmapData.colorTransform(displayObject.__cacheBitmapData.rect,displayObject.__cacheBitmapColorTransform);
}
}
displayObject.__isCacheBitmapRender = false;
}
if(updateTransform || needRender) {
(openfl_geom_Rectangle().default).__pool.release(rect);
}
updated = updateTransform;
} else if(displayObject.__cacheBitmap != null) {
if(renderer.__type == "dom") {
var domRenderer = renderer;
domRenderer.__renderDrawableClear(displayObject.__cacheBitmap);
}
displayObject.__cacheBitmap = null;
displayObject.__cacheBitmapData = null;
displayObject.__cacheBitmapData2 = null;
displayObject.__cacheBitmapData3 = null;
displayObject.__cacheBitmapColorTransform = null;
displayObject.__cacheBitmapRenderer = null;
updated = true;
}
(openfl_geom_ColorTransform().default).__pool.release(colorTransform);
if(updated && displayObject.__drawableType == 7) {
var textField2 = displayObject;
if(textField2.__cacheBitmap != null) {
textField2.__cacheBitmap.__renderTransform.tx -= textField2.__offsetX;
textField2.__cacheBitmap.__renderTransform.ty -= textField2.__offsetY;
}
}
return updated;
}
});
DisplayObjectRenderer.prototype.__class__ = DisplayObjectRenderer.prototype.constructor = $hxClasses["openfl.display.DisplayObjectRenderer"] = DisplayObjectRenderer;
// Init
// Statics
DisplayObjectRenderer.__meta__ = { fields : { __context : { SuppressWarnings : ["checkstyle:Dynamic"]}, __type : { SuppressWarnings : ["checkstyle:Dynamic"]}}}
// Export
exports.default = DisplayObjectRenderer;