Skip to content

Commit 897ea09

Browse files
author
SeanLin
committed
Merge pull request #589 from dingpinglv/iss1509_UpdateMenuTest
fixed #1509 Optimization cc.LayerGradient's performance
2 parents fb6dd79 + e5709df commit 897ea09

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

cocos2d/layers_scenes_transitions_nodes/CCLayer.js

+15-13
Original file line numberDiff line numberDiff line change
@@ -638,27 +638,30 @@ cc.LayerGradient = cc.LayerColor.extend(/** @lends cc.LayerGradient# */{
638638
_compressedInterpolation:false,
639639

640640
_drawGradientCanvas:null,
641+
_sourceGradientCanvas:null,
641642

642643
_buildGradientCanvas:function (layerWidth, layerHeight) {
643644
layerWidth = layerWidth || this.getContentSize().width;
644645
layerHeight = layerHeight || this.getContentSize().height;
645646

646-
var canvas_colors = document.createElement('canvas');
647-
canvas_colors.width = 2;
648-
canvas_colors.height = 2;
647+
if(!this._sourceGradientCanvas)
648+
this._sourceGradientCanvas = document.createElement('canvas');
649+
this._sourceGradientCanvas.width = 2;
650+
this._sourceGradientCanvas.height = 2;
649651

650-
var context_colors = canvas_colors.getContext('2d');
652+
var context_colors = this._sourceGradientCanvas.getContext('2d');
651653
context_colors.fillStyle = 'rgba(0,0,0,1)';
652654
context_colors.fillRect(0, 0, 2, 2);
653655

654656
var image_colors = context_colors.getImageData(0, 0, 2, 2);
655657
var data = image_colors.data;
656658

657-
var canvas_render = document.createElement('canvas');
658-
canvas_render.width = layerWidth;
659-
canvas_render.height = layerHeight;
659+
if(!this._drawGradientCanvas)
660+
this._drawGradientCanvas = document.createElement('canvas');
661+
this._drawGradientCanvas.width = layerWidth;
662+
this._drawGradientCanvas.height = layerHeight;
660663

661-
var context_render = canvas_render.getContext('2d');
664+
var context_render = this._drawGradientCanvas.getContext('2d');
662665
context_render.translate(-layerWidth / 2, -layerHeight / 2);
663666
context_render.scale(layerWidth, layerHeight);
664667

@@ -687,8 +690,7 @@ cc.LayerGradient = cc.LayerColor.extend(/** @lends cc.LayerGradient# */{
687690
data[ 15 ] = 0 | (this._squareColors[1].a * 255);
688691

689692
context_colors.putImageData(image_colors, 0, 0);
690-
context_render.drawImage(canvas_colors, 0, 0);
691-
return canvas_render;
693+
context_render.drawImage(this._sourceGradientCanvas, 0, 0);
692694
},
693695

694696
/**
@@ -701,12 +703,12 @@ cc.LayerGradient = cc.LayerColor.extend(/** @lends cc.LayerGradient# */{
701703
this._alongVector = cc.p(0, -1);
702704
this._super();
703705

704-
this._drawGradientCanvas = this._buildGradientCanvas();
706+
this._buildGradientCanvas();
705707
},
706708

707709
init:function () {
708710
this._super();
709-
this._drawGradientCanvas = this._buildGradientCanvas();
711+
this._buildGradientCanvas();
710712
},
711713

712714
/**
@@ -890,7 +892,7 @@ cc.LayerGradient = cc.LayerColor.extend(/** @lends cc.LayerGradient# */{
890892
this._squareColors[3].b = ((E.b + (S.b - E.b) * ((c - u.x - u.y) / (2.0 * c))));
891893
this._squareColors[3].a = ((E.a + (S.a - E.a) * ((c - u.x - u.y) / (2.0 * c))));
892894

893-
this._drawGradientCanvas = this._buildGradientCanvas();
895+
this._buildGradientCanvas();
894896
},
895897

896898
draw:function (ctx) {

0 commit comments

Comments
 (0)