最近在lua里给ccs的armature添加滤镜,发现cocos3.x的Program和2.x的大不一样,在此,mark下自己的解析过程.
首先,原来在2.x里的GLProgram现在在3.x里直接是Node类的成员了,而在2.x里只是Sprite的成员.
3.x比2.x更进一步的多了一个GLProgramState类,
这个类有什么作用呢?让我们来看看官方的说明:
/** GLProgramState holds the 'state' (uniforms and attributes) of the GLProgram. A GLProgram can be used by thousands of Nodes, but if different uniform values are going to be used, then each node will need its own GLProgramState */
由此可见,GLProgram是通用的,而GLProgramState是每个Node私有的状态.
那么什么是Node私有的呢?
写过2.x的shader的小伙伴们都应该知道,一旦在shader代码里加入uniform变量,那么就需要在c++或者lua代码里继承下sprite,然后给这个继承类写一个变量来和shader里的uniform变量建立关系.
也就是说,uniform变量这样的变量就是Node所私有的状态,每一个node所使用的uniform变量值都可能不一样.