折腾了两天时间,终于弄好了。
3.2其实帮我们做了很多事情,使用着色器也比2.X版本简单太多了 代码如下
_armature = Armature::create(armatureName);
this->addChild(_armature);
//获得所有骨骼,也就是编辑器中的layer
auto& map = _armature->getBoneDic();
for (auto& entry : map){
auto bone = entry.second;
//p为一个shader,可以通过 GLProgram::createWithFilenames("gray.vsh","gray.fsh"); 获得,这里是预先创建好了放入了ShaderCache中,直接取出来就行了
auto p = ShaderCache::getInstance()->getGLProgram("gray");
if (bone){
//这里很关键,不能直接像2.x版本那样 对bone->getDisplayRenderNode()->setGLProgram(),要把每个骨骼身上得显示列表再次遍历
auto list = bone->getDisplayManager()->getDecorativeDisplayList();
for (auto dd:list){
if (dd->getDisplay()){
dd->getDisplay()->setGLProgram(p);//这个方法中已经调用了setGlprogramState(),无需在调用了,也无需在link()和updateUniform()了
}
}
}
}