问下关于CCTrianglesCommand.generateMaterialID()的问题

void TrianglesCommand::generateMaterialID()
{
if(_glProgramState->getUniformCount() > 0)
{
_materialID = Renderer::MATERIAL_ID_DO_NOT_BATCH;
}
else
{
int glProgram = (int)_glProgramState->getGLProgram()->getProgram();
int intArray[4] = { glProgram, (int)_textureID, (int)_blendType.src, (int)_blendType.dst};

    _materialID = XXH32((const void*)intArray, sizeof(intArray), 0);
}

}
代码里那个if判断是为什么呢, 如果把if注释掉 可以减少drawCall的执行次数.这样判断是基于哪方面考虑的

C++这部分是脱胎于cocos2d-x的,在C++中,允许用户自己写shader,碰到这种情况,是不能batch的,否则渲染效果错误,在js中,应该_glProgramState->getUniformCount()都为0才对。