cocosjs 3.16 实现任意大小的rendertexture

本文介绍了在cocosjs 3.16版本中,如何解决rendertexture大小受限于游戏视图的问题,通过重新设置GL窗口大小和相机位置,实现创建任意大小的rendertexture。通过修改CCGLProgram.js和CCRenderTextureWebGLRenderCmd.js,确保在rendertexture结束绘制后,矩阵恢复正常,从而达到优化性能、降低渲染批次的目的。
摘要由CSDN通过智能技术生成

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的窗口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值