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了