reusing rendered data
diff --git a/player/index.html b/player/index.html
index 93013ee..89f85bf 100644
--- a/player/index.html
+++ b/player/index.html
@@ -73,12 +73,12 @@
var animData = {
wrapper: document.getElementById('bodymovin'),
- animType: 'canvas',
- loop: true,
+ animType: 'svg',
+ loop: false,
prerender: false,
autoplay: true,
- animationData: bmsmd
- //path: 'exports/bm'
+ //animationData: bmsmd
+ path: 'exports/navidad'
};
bodymovin.setQuality(50);
diff --git a/player/js/animation/AnimationItem.js b/player/js/animation/AnimationItem.js
index aa721fb..3e84011 100644
--- a/player/js/animation/AnimationItem.js
+++ b/player/js/animation/AnimationItem.js
@@ -203,8 +203,8 @@
this.assets = this.animationData.assets;
this.frameRate = this.animationData.fr;
this.firstFrame = Math.round(this.animationData.ip*this.frameRate);
- this.firstFrame = 1500;
- this.totalFrames = 10;
+ /*this.firstFrame = 0;
+ this.totalFrames = 10;*/
this.frameMult = this.animationData.fr / 1000;
this.trigger('bm:config_ready');
this.loadSegments();
diff --git a/player/js/elements/BaseElement.js b/player/js/elements/BaseElement.js
index 533c89e..7d7419c 100644
--- a/player/js/elements/BaseElement.js
+++ b/player/js/elements/BaseElement.js
@@ -113,8 +113,8 @@
return;
}
this.currentAnimData = this.data.renderedData[num].an;
- var mat = this.currentAnimData.matrixArray;
- this.ownMatrix.reset().transform(mat[0],mat[1],mat[2],mat[3],mat[4],mat[5]).translate(-this.currentAnimData.tr.a[0],-this.currentAnimData.tr.a[1]);
+ var mat = this.currentAnimData.m;
+ this.ownMatrix.reset().transform(mat[0],mat[1],mat[2],mat[3],mat[4],mat[5]).translate(-this.currentAnimData.a[0],-this.currentAnimData.a[1]);
};
BaseElement.prototype.renderFrame = function(num,parentTransform){
@@ -145,7 +145,7 @@
if(this.data.hasMask){
this.maskManager.renderFrame(num);
}
- this.finalTransform.opacity *= this.currentAnimData.tr.o;
+ this.finalTransform.opacity *= this.currentAnimData.o;
var mat;
var finalMat = this.finalTransform.mat;
diff --git a/player/js/elements/ShapeItemElement.js b/player/js/elements/ShapeItemElement.js
index 6229ae9..3fe260a 100644
--- a/player/js/elements/ShapeItemElement.js
+++ b/player/js/elements/ShapeItemElement.js
@@ -174,7 +174,7 @@
groupTransform = parentTransform;
for(i=len;i>=0;i-=1){
if(items[i].ty == 'tr'){
- var mtArr = items[i].renderedData[num].mtArr;
+ var mtArr = items[i].renderedData[num].m;
groupTransform = data[i].transform;
groupMatrix = groupTransform.mat;
groupMatrix.reset();
@@ -352,8 +352,7 @@
viewData.ld = renderedFrameData.dNTr;
}
if(viewData.lt != renderedFrameData.t) {
- ////viewData.elements[i].el.setAttribute('transform',renderedFrameData.t);
- viewData.elements[i].el.style.transform = renderedFrameData.t;
+ viewData.elements[i].el.setAttribute('transform',renderedFrameData.t);
viewData.lt = renderedFrameData.t;
}
}else{
diff --git a/player/js/elements/canvasElements/CVBaseElement.js b/player/js/elements/canvasElements/CVBaseElement.js
index 9eee8f7..4fa7e2b 100644
--- a/player/js/elements/canvasElements/CVBaseElement.js
+++ b/player/js/elements/canvasElements/CVBaseElement.js
@@ -31,8 +31,8 @@
return false;
}
this.currentAnimData = this.data.renderedData[num].an;
- var mat = this.currentAnimData.matrixArray;
- this.ownMatrix.reset().transform(mat[0],mat[1],mat[2],mat[3],mat[4],mat[5]).translate(-this.currentAnimData.tr.a[0],-this.currentAnimData.tr.a[1]);
+ var mat = this.currentAnimData.m;
+ this.ownMatrix.reset().transform(mat[0],mat[1],mat[2],mat[3],mat[4],mat[5]).translate(-this.currentAnimData.a[0],-this.currentAnimData.a[1]);
if(this.data.ip - this.data.st <= num && this.data.op - this.data.st >= num)
{
this.renderFrame = true;
@@ -60,7 +60,7 @@
var mat, finalMat = this.finalTransform.mat;
- this.finalTransform.opacity *= this.currentAnimData.tr.o;
+ this.finalTransform.opacity *= this.currentAnimData.o;
if(parentTransform){
mat = parentTransform.mat.props;
diff --git a/player/js/elements/canvasElements/CVShapeItemElement.js b/player/js/elements/canvasElements/CVShapeItemElement.js
index d69c06c..421210e 100644
--- a/player/js/elements/canvasElements/CVShapeItemElement.js
+++ b/player/js/elements/canvasElements/CVShapeItemElement.js
@@ -201,7 +201,7 @@
CVShapeItemElement.prototype.renderTransform = function(animData){
var tr = animData.renderedData[this.frameNum];
- var matrixValue = tr.mtArr;
+ var matrixValue = tr.m;
this.transform.mat.transform(matrixValue[0],matrixValue[1],matrixValue[2],matrixValue[3],matrixValue[4],matrixValue[5]).translate(-tr.a[0],-tr.a[1]);
this.transform.opacity *= tr.o;
};
diff --git a/player/js/renderers/SVGRenderer.js b/player/js/renderers/SVGRenderer.js
index 88218ee..69309f2 100644
--- a/player/js/renderers/SVGRenderer.js
+++ b/player/js/renderers/SVGRenderer.js
@@ -200,7 +200,6 @@
if(this.lastFrame == num || this.destroyed){
return;
}
- window.contador = 0;
if(num === null){
num = this.lastFrame;
}else{
@@ -214,5 +213,4 @@
for (i = 0; i < len; i++) {
this.elements[i].renderFrame(num - this.layers[i].st);
}
- //console.log('window.contador: ',window.contador);
};
\ No newline at end of file
diff --git a/player/js/utils/DataManager.js b/player/js/utils/DataManager.js
index 7e12618..2e957d6 100644
--- a/player/js/utils/DataManager.js
+++ b/player/js/utils/DataManager.js
@@ -46,6 +46,7 @@
}
layerData.renderedFrame = {};
layerData.renderedData = {};
+ layerData.__lastMatrix = [0,0,0,0,0];
animArray = [];
lastFrame = -1;
if(layerData.tm){
@@ -158,6 +159,7 @@
}else{
transformData.r *= degToRads;
}
+ transformData.lastMat = [0,0,0,0,0];
}else if(arr[i].ty == 'rc' || arr[i].ty == 'el'){
arr[i].trimmed = isTrimmed;
arr[i].trimmed = true;
@@ -706,23 +708,27 @@
};
}());
+ function RenderedTransform(a,o,m){
+ this.a = a;
+ this.o = o;
+ this.m = m;
+ }
+
var mtParams = [0,1,1,0,0];
function iterateLayers(layers, frameNum,renderType){
- var dataOb;
var maskProps;
var timeRemapped;
var offsettedFrameNum, i, len, renderedData;
- var j, jLen = layers.length, item, matArr, newData;
+ var j, jLen = layers.length, item, newData;
for(j=0;j<jLen;j+=1){
item = layers[j];
if(!('ks' in layers[j])) {
continue;
}
offsettedFrameNum = frameNum - item.st;
- dataOb = {};
- dataOb.a = getInterpolatedValue(item.ks.a,offsettedFrameNum, item.st);
- dataOb.o = getInterpolatedValue(item.ks.o,offsettedFrameNum, item.st);
+ var a = getInterpolatedValue(item.ks.a,offsettedFrameNum, item.st);
+ var o = getInterpolatedValue(item.ks.o,offsettedFrameNum, item.st);
if(item.ks.p.s){
getInterpolatedValue(item.ks.p.x,offsettedFrameNum, item.st,mtParams,3,1);
getInterpolatedValue(item.ks.p.y,offsettedFrameNum, item.st,mtParams,4,1);
@@ -732,15 +738,15 @@
getInterpolatedValue(item.ks.r,offsettedFrameNum, item.st,mtParams,0,1);
getInterpolatedValue(item.ks.s,offsettedFrameNum, item.st,mtParams,1,2);
renderedData = {};
- matArr = matrixInstance.getMatrixArrayFromParams(mtParams[0],mtParams[1],mtParams[2],mtParams[3],mtParams[4]);
newData = false;
- if(!item.__lastRenderAn || dataOb.o !== item.__lastRenderAn.tr.o || dataOb.a[0] !== item.__lastRenderAn.tr.a[0] || dataOb.a[1] !== item.__lastRenderAn.tr.a[1] || matArr[1] !== item.__lastRenderAn.matrixArray[1] || matArr[2] !== item.__lastRenderAn.matrixArray[2] || matArr[3] !== item.__lastRenderAn.matrixArray[3] || matArr[4] !== item.__lastRenderAn.matrixArray[4] || matArr[5] !== item.__lastRenderAn.matrixArray[5]){
- renderedData.an = {
- tr: dataOb
- };
- renderedData.an.matrixArray = matArr;
+ if(!item.__lastRenderAn || o !== item.__lastRenderAn.o || a !== item.__lastRenderAn.a || mtParams[0] !== item.__lastMatrix[0]
+ || mtParams[1] !== item.__lastMatrix[1] || mtParams[2] !== item.__lastMatrix[2] || mtParams[3] !== item.__lastMatrix[3] || mtParams[4] !== item.__lastMatrix[4] ){
+ renderedData.an = new RenderedTransform(a,o,matrixInstance.getMatrixArrayFromParams(mtParams[0],mtParams[1],mtParams[2],mtParams[3],mtParams[4]))
item.__lastRenderAn = renderedData.an;
+ for(i=0;i<5;i+=1){
+ item.__lastMatrix[i] = mtParams[i];
+ }
}else{
renderedData.an = item.__lastRenderAn;
}
@@ -986,14 +992,21 @@
shapeItem.renderedData[offsettedFrameNum].color = rgbToHex(bm_rounder(strokeColor[0]),bm_rounder(strokeColor[1]),bm_rounder(strokeColor[2]));
}
}else if(shapeItem.ty == 'tr'){
- shapeItem.renderedData[offsettedFrameNum] = {
- a : getInterpolatedValue(shapeItem.a,offsettedFrameNum, startTime),
- o : getInterpolatedValue(shapeItem.o,offsettedFrameNum, startTime)
- };
+ var a = getInterpolatedValue(shapeItem.a,offsettedFrameNum, startTime);
+ var o = getInterpolatedValue(shapeItem.o,offsettedFrameNum, startTime);
getInterpolatedValue(shapeItem.s,offsettedFrameNum, startTime,mtParams,1,2);
getInterpolatedValue(shapeItem.r,offsettedFrameNum, startTime,mtParams,0,1);
getInterpolatedValue(shapeItem.p,offsettedFrameNum, startTime,mtParams,3,2);
- shapeItem.renderedData[offsettedFrameNum].mtArr = matrixInstance.getMatrixArrayFromParams(mtParams[0],mtParams[1],mtParams[2],mtParams[3],mtParams[4]);
+ if(shapeItem.lastData && shapeItem.lastData.a == a && shapeItem.lastData.o == o && shapeItem.lastMat[0] == mtParams[0]
+ && shapeItem.lastMat[1] == mtParams[1] && shapeItem.lastMat[2] == mtParams[2] && shapeItem.lastMat[3] == mtParams[3] && shapeItem.lastMat[4] == mtParams[4]){
+ shapeItem.renderedData[offsettedFrameNum] = shapeItem.lastData;
+ }else{
+ shapeItem.renderedData[offsettedFrameNum] = new RenderedTransform(a,o,matrixInstance.getMatrixArrayFromParams(mtParams[0],mtParams[1],mtParams[2],mtParams[3],mtParams[4]));
+ for(j=0;j<5;j+=1){
+ shapeItem.lastMat[j] = mtParams[j];
+ }
+ shapeItem.lastData = shapeItem.renderedData[offsettedFrameNum];
+ }
}else if(shapeItem.ty == 'tm'){
trimS = getInterpolatedValue(shapeItem.s,offsettedFrameNum, startTime);
trimE = getInterpolatedValue(shapeItem.e,offsettedFrameNum, startTime);