Browse Source

Canvas2D: make primitive dispose safer + Sprite2D fixes

#1857

Sprite2D:
 - SpriteSize (using postscale) was wrongly propagating to children primitives
 - Sprites were detected as using the positioning when they were not supposed to resulting in unexpected behaviors (thanks  @Raitch for reporting)
nockawa 8 years ago
parent
commit
c6a82a318a

+ 4 - 0
canvas2D/src/Engine/babylon.modelRenderCache.ts

@@ -50,6 +50,10 @@
             return true;
         }
 
+        public get isDisposed(): boolean {
+            return this._isDisposed;
+        }
+
         private _isDisposed: boolean;
         owner: Group2D;
 

+ 3 - 3
canvas2D/src/Engine/babylon.prim2dBase.ts

@@ -3734,7 +3734,7 @@
                     hasCanvasScale = true;
                     canvasScale = (this._parent as Canvas2D)._canvasLevelScale || Prim2DBase._iv3;
                 }
-                let globalScale = this._scale.multiplyByFloats(postScale.x*canvasScale.x, postScale.y*canvasScale.y);
+                let globalScale = this._scale.multiplyByFloats(/*postScale.x**/canvasScale.x, /*postScale.y**/canvasScale.y);
 
                 if ((this._origin.x === 0 && this._origin.y === 0) || this._hasMargin) {
                     local = Matrix2D.Compose(globalScale, rot, new Vector2(pos.x + this._marginOffset.x, pos.y + this._marginOffset.y));
@@ -3747,8 +3747,8 @@
                     let t2 = Prim2DBase._t2;
                     let as = Prim2DBase._ts0;
                     as.copyFrom(this.actualSize);
-                    as.width /= postScale.x;
-                    as.height /= postScale.y;
+                    //as.width /= postScale.x;
+                    //as.height /= postScale.y;
                     Matrix2D.TranslationToRef((-as.width * this._origin.x), (-as.height * this._origin.y), t0);
 
                     // -Origin * rotation

+ 5 - 1
canvas2D/src/Engine/babylon.renderablePrim2d.ts

@@ -449,8 +449,9 @@
             for (let part of this._instanceDataParts) {
                 part.freeElements();
                 gii = part.groupInstanceInfo;
+                part.groupInstanceInfo = null;
             }
-            if (gii) {
+            if (gii && !gii.isDisposed) {
                 let usedCount = 0;
                 if (gii.hasOpaqueData) {
                     let od = gii.opaqueData[0];
@@ -679,6 +680,9 @@
             if (!gii) {
                 gii = rd._renderGroupInstancesInfo.get(this.modelKey);
             }
+            if (gii.isDisposed) {
+                return;
+            }
 
             let isTransparent = this.isTransparent;
             let isAlphaTest = this.isAlphaTest;

+ 1 - 0
canvas2D/src/Engine/babylon.sprite2d.ts

@@ -352,6 +352,7 @@
             if (settings.size != null) {
                 this.size = settings.size;
             }
+            this._updatePositioningState();
             this.spriteFrame = 0;
             this.invertY = (settings.invertY == null) ? false : settings.invertY;
             this.alignToPixel = (settings.alignToPixel == null) ? true : settings.alignToPixel;