cocos2dx3.2版本 C++ 给Armature添加shader的方法

折腾了两天时间,终于弄好了。
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()了
                }
            }
        }
    }

沙发,赞一个~