cocos2d::glprogram分析

1、glprogram分析

2、实例应用,变暗、变灰shader


cocos2d::glprogram分析_第1张图片

可见glprogram提供shader的编译、链接和使用,并且封装了一些方法

定义了一些枚举变量,包括一些固定的顶点属性、内置uniform,写好的一些shader名,如下:


cocos2d::glprogram分析_第2张图片

glprogram初始化如下:


cocos2d::glprogram分析_第3张图片

_program为shader的编号,_builtinuniforms为内置uniform的数组,用来存uniform的地址,hash值还不知道用来干嘛,后面分析,flag标记用的什么变换矩阵

然后是主要函数编译shader


cocos2d::glprogram分析_第4张图片

先看init:

cocos2d::glprogram分析_第5张图片


cocos2d::glprogram分析_第6张图片


其中在某些平台上,如果已经编译过了则使用缓存中的

在编译中时,会把一些内置uniform加入到shader前面。如下:

cocos2d::glprogram分析_第7张图片

再看link:


cocos2d::glprogram分析_第8张图片

bindPredefinedVertexAttribs绑定一些顶点属性(这里有点疑惑)


cocos2d::glprogram分析_第9张图片

然后把顶点属性的值存在map中

cocos2d::glprogram分析_第10张图片

parseUniform同上,把uniform的相关值存在map中


updateuniform,设置一些标记,感觉很奇怪,为什么不直接使用前面的uniformmap(解决,之前存在map中的uniform会过滤掉cc_开头的内置uniform)


cocos2d::glprogram分析_第11张图片

注意一点:在setUniform时,会用hash表存之前的值,如果相同就不再设置了


cocos2d::glprogram分析_第12张图片


cocos2d::glprogram分析_第13张图片

你可能感兴趣的:(cocos2d::glprogram分析)