cocosjs 3.16 实现任意大小的rendertexture
需求
公司做h5项目,需要对性能进行优化,把英雄头像、装备icon 统一画到rendertexture上,实现batchnode的draw,降低渲染批次。
这样效果确实很明显,能从几百的draw降低到几个。
问题
3.16的js版本的rendertexture有个问题,他们render依赖于游戏的view(游戏视图大小),
创建的最大纹理不能大于游戏视图,所以网上搜一大堆就是设置大小为视图的像素大小。
var _render = cc.RenderTexture.create(_width,_height);
var _winsize = cc.director.getWinSizeInPixels();
_render.setVirtualViewport(
cc.p(0,0) ,new
cc.rect(0,0,_winsize.width,_winsize.height),new
cc.rect(0,0,_winsize.width,_winsize.height)
);
var _rt = this._render;
_rt.begin();
node.visit();
_rt.end();
一般就是这么用了,但是这样会有几个问题。
* 创建的texture的大小最大就是游戏的分辨率的大小,比如我游戏的设计分辨率是1024*615,我想创建一个2048*1230 ,这样就没办法。
* node的位置是相对于游戏视图的,比如在no_bord模式下,node设置位置为0,0就有部分会被切割掉。
* 参数的设置太麻烦了,要设置一堆参数(简单点应该是这样:我给你一个w、h的texture,你给我去画,其他的?自己设置)。
所以我们就想解决这个问题。
解决方案
把rendertexture从view的依赖中独立出来。
理论知识:将renderture从view中独立出来其实就是重新设置gl的转换关系:我们重新设置个
gl的窗口