From 39a2a651d7100f317e724e439035d0b24232bbc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=B8=D1=82=D0=B0=20=D0=91=D0=B5=D1=81?= =?UTF-8?q?=D1=88=D0=B0=D0=BF=D0=BE=D1=88=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2?= Date: Sat, 22 Sep 2018 19:15:38 +0300 Subject: [PATCH] Correctly safe cache render cache flag from renderer when using RenderTexture --- cocos2d/render-texture/CCRenderTexture.js | 1 - cocos2d/render-texture/CCRenderTextureCanvasRenderCmd.js | 7 +++++++ cocos2d/render-texture/CCRenderTextureWebGLRenderCmd.js | 7 +++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/cocos2d/render-texture/CCRenderTexture.js b/cocos2d/render-texture/CCRenderTexture.js index 5cc00ae45a..c9c8048f99 100644 --- a/cocos2d/render-texture/CCRenderTexture.js +++ b/cocos2d/render-texture/CCRenderTexture.js @@ -202,7 +202,6 @@ cc.RenderTexture = cc.Node.extend(/** @lends cc.RenderTexture# */{ * @function */ begin: function () { - cc.renderer._turnToCacheMode(this.__instanceId); this._renderCmd.begin(); }, /** diff --git a/cocos2d/render-texture/CCRenderTextureCanvasRenderCmd.js b/cocos2d/render-texture/CCRenderTextureCanvasRenderCmd.js index c55f9e7ad1..31df9ae632 100644 --- a/cocos2d/render-texture/CCRenderTextureCanvasRenderCmd.js +++ b/cocos2d/render-texture/CCRenderTextureCanvasRenderCmd.js @@ -28,6 +28,8 @@ this._needDraw = false; this._clearColorStr = "rgba(255,255,255,1)"; + this._oldIsCacheToCanvasOn = false; + this._cacheCanvas = document.createElement('canvas'); this._cacheContext = new cc.CanvasContextWrapper(this._cacheCanvas.getContext('2d')); }; @@ -70,6 +72,8 @@ }; proto.begin = function () { + this._oldIsCacheToCanvasOn = cc.renderer._isCacheToCanvasOn; + cc.renderer._turnToCacheMode(node.__instanceId); }; proto._beginWithClear = function (r, g, b, a, depthValue, stencilValue, flags) { @@ -91,6 +95,9 @@ var scale = cc.contentScaleFactor(); cc.renderer._renderingToCacheCanvas(this._cacheContext, node.__instanceId, scale, scale); + + cc.renderer._isCacheToCanvasOn = this._oldIsCacheToCanvasOn; + var spriteRenderCmd = node.sprite._renderCmd; spriteRenderCmd._notifyRegionStatus && spriteRenderCmd._notifyRegionStatus(cc.Node.CanvasRenderCmd.RegionStatus.Dirty); }; diff --git a/cocos2d/render-texture/CCRenderTextureWebGLRenderCmd.js b/cocos2d/render-texture/CCRenderTextureWebGLRenderCmd.js index 9abe91feaf..41048c3fb5 100644 --- a/cocos2d/render-texture/CCRenderTextureWebGLRenderCmd.js +++ b/cocos2d/render-texture/CCRenderTextureWebGLRenderCmd.js @@ -29,6 +29,7 @@ this._fBO = null; this._oldFBO = null; + this._oldIsCacheToBufferOn = false; this._textureCopy = null; this._depthRenderBuffer = null; @@ -226,6 +227,10 @@ proto.begin = function () { var node = this._node; + + this._oldIsCacheToBufferOn = cc.renderer._isCacheToBufferOn; + cc.renderer._turnToCacheMode(node.__instanceId); + // Save the current matrix cc.kmGLMatrixMode(cc.KM_GL_PROJECTION); cc.kmGLPushMatrix(); @@ -320,6 +325,8 @@ var node = this._node; cc.renderer._renderingToBuffer(node.__instanceId); + cc.renderer._isCacheToBufferOn = this._oldIsCacheToBufferOn; + var gl = cc._renderContext; var director = cc.director; gl.bindFramebuffer(gl.FRAMEBUFFER, this._oldFBO);