cocos2d-x的坑之 setUniformTexture(textureName, _TextureID);

记录一下,这个函数有坑。 cocos2dx为了兼容移动平台,限制默认最大纹理单元是16 。而且一般情况下

内置了4个纹理单元的 uniform 变量  CC_Texture0  CC_Texture1  CC_Texture3  CC_Texture4, 我们可以不用

定义直接使用。

在我的一个片段shader中可能需要用到16个纹理单元。 因此自定义了 texture0、 texture1 ... texture15

所以我打算不使用内置的CC_Texture0 ... 等几个 变量

然后需要为自定义的uniform变量绑定纹理调用函数

setUniformTexture("texture0", _TextureID);  

setUniformTexture("texture1", _TextureID);  

......

然后坑来了。 cocos2dx 3.7版本中,改函数用到的一个记录纹理单元数的变量居然是从1开始的而不是从0开始的。

一般情况下是没有问题的,但其实这里cocos2dx 隐式强制了我们得至少使用  CC_Texture0。

因为当我们不使用CC_Texture0的话, 我们其实最多只能使用17个自定义的纹理单元。或者说一个

shader最多只能调用这个函数17次。 大多数情况下是不会有问题的,仅仅是我这个shader刚好要全部用

18个纹理单元,所以在后面出现了超过纹理限制断言错误。

 

断言错误的地方:

然后我觉得从1开始有点不科学,可能后面的版本改正过来了吧,又去查看了最新的3.17.2版本:

发现不但没有改成0 ,反而是改成了4, 也就是说后面如果我们要用到超过14张纹理单元的时候

就得注意一下了。 我们至少得使用一下CC_Texture0 - CC_Texture4。 否则无法全部用自定义的

变量使用 超过14张的纹理哦。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值