Material 感觉有bug啊,搞了半天没搞定

Sprite3D 设置了一个自定义的Material,
然后调用setTechnique 更改一个特效
永远是第一个technique是OK的,其他的technique 代码动态setTechnique时总是有的效果是不对的
在材质文件中调整technique的顺序一直是第一个是OK的,
除非重新setMaterial 才能OK.
看了一下代码 也没发现什么大问题. 懵逼来了

void Mesh::setTexture(Texture2D* tex, NTextureData::Usage usage, bool cacheFileName)
{
// Texture must be saved for future use
// it doesn’t matter if the material is already set or not
// This functionality is added for compatibility issues
if (tex == nullptr)
tex = getDummyTexture();

CC_SAFE_RETAIN(tex);
CC_SAFE_RELEASE(_textures[usage]);
_textures[usage] = tex;   

if (usage == NTextureData::Usage::Diffuse){
    if (_material) {
        auto technique = _material->_currentTechnique;
        for(auto& pass: technique->_passes)
        {
            // FIXME: Ideally it should use glProgramState->setUniformTexture()
            // and set CC_Texture0 that way. But trying to it, will trigger
            // another bug
            pass->setTexture(tex);
        }
    }
    
    bindMeshCommand();
    if (cacheFileName)
        _texFile = tex->getPath();
}
else if (usage == NTextureData::Usage::Normal) // currently only diffuse and normal are supported
{
    if (_material){
        auto technique = _material->_currentTechnique;
        for(auto& pass: technique->_passes)
        {
            pass->getGLProgramState()->setUniformTexture(s_uniformSamplerName[(int)usage], tex);
        }
    }
}

}

这个地方只设置了 _currentTechnique的pass的纹理啊

这个貌似OK了