先看看和glprogram的区别,下面是官方的解释:
/**
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
*/

可见大多是对于uniform的赋值
glprogram根据一个program创建:

初始化如下:

init中增加了program的引用计数,然后把program中的attribute和uniform的map保存下来

2、glprogramcache
单例用来缓存shader

回到glprogramstate,默认的外部接口:

从cache中拿到缓存的shader
然后看保存的state中是否有,有则返回,无则加入到缓存state中


注意,programstate最后调用的是program的initWithByteArrays,并没有调用createWithByteArrays,但是和createWithByteArrays的流程一样,initWithByteArrays->link->updateuniform

