c416288806 Yan demo里面的问题问题应该出在mask,内容改动一下就会闪一下。demo被遮的是个animation,经过测试panel也会。盲猜可能和获取显示区域有关系...这个问题官方有在关注吗T.T!
Laya_Fred 您好,这个问题可以这样进行下处理,在laya.core.js的_flushToTarget方法的target.start之前进行下gl.flush或者gl.finish处理,修改如下:
c416288806 Yan @Yan:设置mask后会走Canvas,到_checkCanvasEnable方法走bitmap,RenderSprite里面,到_canvas_repaint方法后,if (_cacheStyle.staticCache) 这一段注释掉,每次都把reCache=false可以减缓闪烁的频率...还会闪。
c416288806 Yan @Yan:@c416288806:@Yan:if (_cacheStyle.staticCache) 判断去掉 _canvas_repaint末尾,每次都reCache=false 就不闪了。 手动设置reCache=true就会闪一下。测试画面看起来像是:当一个_cacheStyle.cacheAs = "bitmap" 的 sprite执行_canvas方法的时候,如果reCache为true 进入_canvas_repaint 就会导致当前帧内后续执行的RenderSprite执行异常。 且异常的表现是:会显示出1帧旧的缓存画面。这边做了个物体移动的参照物,每次闪屏的时候会回到之前显示的位置。
Yan Yan @c416288806:1、首先排查了mask方法里面使用rendertexture2D在混合模式时导致的闪屏。同过屏蔽mask方法里面的渲染命令发现切换为normal或其他混合模式都会闪屏。目前猜测应该不是混合模式的问题。2、可能是rendertexture2D里面的start方法内的bindframebuffer语句传的this._framebuffer会出现错误的情况。将this._framebuffer改为null后发现不闪屏了,然后在mask方法流程中使用rendertexture替换rendertexture2D还会闪屏。目前猜测应该也不是这个问题。
c416288806 Yan @Yan:你好,提供个线索.有定位到在_flushToTarget方法的target.clear(0, 0, 0, 0);执行后,才会发生闪屏。如果不执行target.clear,不闪屏了。但是遮罩绘制内容会持续叠加。
c416288806 Yan @Yan:在进入_flushToTarget的时候,webgl缓冲区里的东西 pc端和IOS15.4不一致。所以这个地方清理会出问题。 即使不清理,context.flush不执行。 能看到一样的闪屏效果。
c416288806 Yan @c416288806:_flushToTarget里面的target.start之前。 gl.flush 或者gl.finish一下。 考虑性能的话判断一下Laya.Browser.onIOS