cocos2d-x 3.x的GLProgramState剖析


最近在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变量值都可能不一样.

你可能感兴趣的:(cocos2d-x 3.x的GLProgramState剖析)