Skip to content

Commit 5ba285e

Browse files
author
pandamicro
committed
Improve render command syncStatus logic
1 parent 28d62b2 commit 5ba285e

11 files changed

+34
-37
lines changed

Diff for: cocos2d/clipping-nodes/CCClippingNode.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ cc.ClippingNode = cc.Node.extend(/** @lends cc.ClippingNode# */{
9090
*/
9191
onEnter: function () {
9292
cc.Node.prototype.onEnter.call(this);
93-
this._stencil.onEnter();
93+
if (this._stencil)
94+
this._stencil.onEnter();
9495
},
9596

9697
/**
@@ -103,7 +104,8 @@ cc.ClippingNode = cc.Node.extend(/** @lends cc.ClippingNode# */{
103104
*/
104105
onEnterTransitionDidFinish: function () {
105106
cc.Node.prototype.onEnterTransitionDidFinish.call(this);
106-
this._stencil.onEnterTransitionDidFinish();
107+
if (this._stencil)
108+
this._stencil.onEnterTransitionDidFinish();
107109
},
108110

109111
/**

Diff for: cocos2d/clipping-nodes/CCClippingNodeCanvasRenderCmd.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@
178178
this._curLevel = parentCmd._curLevel + 1;
179179
var transformRenderCmd = this;
180180

181+
this._syncStatus(parentCmd);
181182
// Composition mode, costy but support texture stencil
182183
this._clipElemType = !(!this._cangodhelpme() && node._stencil instanceof cc.DrawNode);
183184
if (!node._stencil || !node._stencil.visible) {
@@ -186,7 +187,6 @@
186187
return;
187188
}
188189

189-
this._syncStatus(parentCmd);
190190
cc.renderer.pushRenderCommand(this._rendererSaveCmd);
191191
if(this._clipElemType){
192192
// Draw everything first using node visit function
@@ -220,4 +220,4 @@
220220
cc.ClippingNode.CanvasRenderCmd._getSharedCache = function () {
221221
return (cc.ClippingNode.CanvasRenderCmd._sharedCache) || (cc.ClippingNode.CanvasRenderCmd._sharedCache = document.createElement("canvas"));
222222
};
223-
})();
223+
})();

Diff for: cocos2d/core/base-nodes/CCNodeCanvasRenderCmd.js

+3-9
Original file line numberDiff line numberDiff line change
@@ -451,13 +451,6 @@ cc.Node.RenderCmd.prototype = {
451451
// In the visit logic does not restore the _dirtyFlag
452452
// Because child elements need parent's _dirtyFlag to change himself
453453
var locFlag = this._dirtyFlag, parentNode = null;
454-
if (parentCmd) {
455-
parentNode = parentCmd._node;
456-
this._savedDirtyFlag = this._savedDirtyFlag || parentCmd._savedDirtyFlag || locFlag;
457-
}
458-
else {
459-
this._savedDirtyFlag = this._savedDirtyFlag || locFlag;
460-
}
461454

462455
// There is a possibility:
463456
// The parent element changed color, child element not change
@@ -474,11 +467,11 @@ cc.Node.RenderCmd.prototype = {
474467
if (parentCmd && (parentCmd._dirtyFlag & dirtyFlags.transformDirty))
475468
locFlag |= dirtyFlags.transformDirty;
476469

470+
this._dirtyFlag = locFlag;
471+
477472
var colorDirty = locFlag & dirtyFlags.colorDirty,
478473
opacityDirty = locFlag & dirtyFlags.opacityDirty;
479474

480-
this._dirtyFlag = locFlag;
481-
482475
if (colorDirty)
483476
//update the color
484477
this._syncDisplayColor();
@@ -529,6 +522,7 @@ cc.Node.RenderCmd.prototype = {
529522

530523
cc.Node.RenderCmd.prototype.originVisit = cc.Node.RenderCmd.prototype.visit;
531524
cc.Node.RenderCmd.prototype.originTransform = cc.Node.RenderCmd.prototype.transform;
525+
cc.Node.RenderCmd.prototype._originSyncStatus = cc.Node.RenderCmd.prototype._syncStatus;
532526

533527
//-----------------------Canvas ---------------------------
534528

Diff for: cocos2d/core/labelttf/CCLabelTTFCanvasRenderCmd.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ cc.LabelTTF._firsrEnglish = /^[a-zA-Z0-9ÄÖÜäöüßéèçàùêâîôû]/;
339339
if (locFlag & flags.textDirty)
340340
this._updateTexture();
341341

342-
cc.Node.RenderCmd.prototype._syncStatus.call(this, parentCmd);
342+
this._originSyncStatus(parentCmd);
343343

344344
if (cc._renderType === cc.game.RENDER_TYPE_WEBGL || locFlag & flags.transformDirty)
345345
this.transform(parentCmd);

Diff for: cocos2d/core/layers/CCLayerCanvasRenderCmd.js

+6-5
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,14 @@
6868

6969
proto._syncStatus = function (parentCmd) {
7070
var flags = cc.Node._dirtyFlags, locFlag = this._dirtyFlag;
71-
if (locFlag & flags.orderDirty) {
71+
// if (locFlag & flags.orderDirty) {
72+
if (this._isBaked || locFlag & flags.orderDirty) {
7273
this._cacheDirty = true;
7374
if(this._updateCache === 0)
7475
this._updateCache = 2;
75-
this._dirtyFlag = locFlag & flags.orderDirty ^ locFlag;
76+
this._dirtyFlag &= ~flags.orderDirty;
7677
}
77-
cc.Node.RenderCmd.prototype._syncStatus.call(this, parentCmd);
78+
this._originSyncStatus(parentCmd);
7879
};
7980

8081
proto.transform = function (parentCmd, recursive) {
@@ -414,7 +415,7 @@
414415
this._dirtyFlag = locFlag & flags.gradientDirty ^ locFlag;
415416
}
416417

417-
cc.Node.RenderCmd.prototype._syncStatus.call(this, parentCmd);
418+
this._originSyncStatus(parentCmd);
418419
};
419420

420421
proto._updateColor = function() {
@@ -452,4 +453,4 @@
452453
}
453454
}
454455
};
455-
})();
456+
})();

Diff for: cocos2d/core/layers/CCLayerWebGLRenderCmd.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@
189189
this._dirtyFlag = locFlag & flags.gradientDirty ^ locFlag;
190190
}
191191

192-
cc.Node.RenderCmd.prototype._syncStatus.call(this, parentCmd);
192+
this._originSyncStatus(parentCmd);
193193
};
194194

195195
proto.transform = function (parentCmd, recursive) {
@@ -331,4 +331,4 @@
331331
}
332332
return this._clipRect;
333333
};
334-
})();
334+
})();

Diff for: cocos2d/parallax/CCParallaxNodeRenderCmd.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040

4141
proto._syncStatus = function(parentCmd){
4242
this._node._updateParallaxPosition();
43-
cc.Node.CanvasRenderCmd.prototype._syncStatus.call(this, parentCmd);
43+
this._originSyncStatus(parentCmd);
4444
};
4545
})();
4646

@@ -63,7 +63,7 @@ cc.game.addEventListener(cc.game.EVENT_RENDERER_INITED, function () {
6363

6464
proto._syncStatus = function(parentCmd){
6565
this._node._updateParallaxPosition();
66-
cc.Node.WebGLRenderCmd.prototype._syncStatus.call(this, parentCmd);
66+
this._originSyncStatus(parentCmd);
6767
};
6868
});
6969

Diff for: cocos2d/progress-timer/CCProgressTimerCanvasRenderCmd.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -221,14 +221,14 @@
221221

222222
if (colorDirty){
223223
spriteCmd._syncDisplayColor();
224-
spriteCmd._dirtyFlag = spriteCmd._dirtyFlag & flags.colorDirty ^ spriteCmd._dirtyFlag;
225-
this._dirtyFlag = this._dirtyFlag & flags.colorDirty ^ this._dirtyFlag;
224+
spriteCmd._dirtyFlag &= ~flags.colorDirty;
225+
this._dirtyFlag &= ~flags.colorDirty;
226226
}
227227

228228
if (opacityDirty){
229229
spriteCmd._syncDisplayOpacity();
230-
spriteCmd._dirtyFlag = spriteCmd._dirtyFlag & flags.opacityDirty ^ spriteCmd._dirtyFlag;
231-
this._dirtyFlag = this._dirtyFlag & flags.opacityDirty ^ this._dirtyFlag;
230+
spriteCmd._dirtyFlag &= ~flags.opacityDirty;
231+
this._dirtyFlag &= ~flags.opacityDirty;
232232
}
233233

234234
if(colorDirty || opacityDirty){
@@ -241,7 +241,7 @@
241241
}
242242

243243
if (locFlag & flags.orderDirty) {
244-
this._dirtyFlag = this._dirtyFlag & flags.orderDirty ^ this._dirtyFlag;
244+
this._dirtyFlag &= ~flags.orderDirty;
245245
}
246246
};
247247

@@ -281,4 +281,4 @@
281281
}
282282
this._dirtyFlag = 0;
283283
};
284-
})();
284+
})();

Diff for: cocos2d/progress-timer/CCProgressTimerWebGLRenderCmd.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,14 @@
123123

124124
if (colorDirty){
125125
spriteCmd._syncDisplayColor();
126-
spriteCmd._dirtyFlag = spriteCmd._dirtyFlag & flags.colorDirty ^ spriteCmd._dirtyFlag;
127-
this._dirtyFlag = this._dirtyFlag & flags.colorDirty ^ this._dirtyFlag;
126+
spriteCmd._dirtyFlag &= ~flags.colorDirty;
127+
this._dirtyFlag &= ~flags.colorDirty;
128128
}
129129

130130
if (opacityDirty){
131131
spriteCmd._syncDisplayOpacity();
132-
spriteCmd._dirtyFlag = spriteCmd._dirtyFlag & flags.opacityDirty ^ spriteCmd._dirtyFlag;
133-
this._dirtyFlag = this._dirtyFlag & flags.opacityDirty ^ this._dirtyFlag;
132+
spriteCmd._dirtyFlag &= ~flags.opacityDirty;
133+
this._dirtyFlag &= ~flags.opacityDirty;
134134
}
135135

136136
if(colorDirty || opacityDirty){
@@ -144,7 +144,7 @@
144144

145145
if (locFlag & flags.textureDirty) {
146146
this._updateProgressData();
147-
this._dirtyFlag = this._dirtyFlag & flags.textureDirty ^ this._dirtyFlag;
147+
this._dirtyFlag &= ~flags.textureDirty;
148148
}
149149

150150
spriteCmd._dirtyFlag = 0;
@@ -536,4 +536,4 @@
536536
}
537537
this._vertexDataDirty = true;
538538
};
539-
})();
539+
})();

Diff for: extensions/ccui/base-classes/UIScale9SpriteCanvasRenderCmd.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@
114114
var flags = cc.Node._dirtyFlags,
115115
locFlag = this._dirtyFlag;
116116

117-
cc.Node.RenderCmd.prototype._syncStatus.call(this, parentCmd);
117+
this._originSyncStatus(parentCmd);
118118

119119
if (locFlag & flags.cacheDirty) {
120120
this._cacheScale9Sprite();

Diff for: extensions/ccui/base-classes/UIScale9SpriteWebGLRenderCmd.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@
130130
};
131131

132132
proto._syncStatus = function (parentCmd){
133-
cc.Node.WebGLRenderCmd.prototype._syncStatus.call(this, parentCmd);
133+
this._originSyncStatus(parentCmd);
134134
this._updateDisplayColor(this._displayedColor);
135135
this._updateDisplayOpacity(this._displayedOpacity);
136136
};

0 commit comments

Comments
 (0)