记录一下,这个函数有坑。 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张的纹理哦。