3.5beta0 的GLProgramStateCache::getGLProgramState(GLProgram* glprogram) 是什么情况下用的?

引擎版本3.5 beta0

看cpp-test 里的ShaderTest.cpp : 161

void ShaderNode::loadShaderVertex(const std::string &vert, const std::string &frag)
{
auto fileUtiles = FileUtils::getInstance();

// frag
auto fragmentFilePath = fileUtiles->fullPathForFilename(frag);
auto fragSource = fileUtiles->getStringFromFile(fragmentFilePath);


// vert
std::string vertSource;
if (vert.empty()) {
    vertSource = ccPositionTextureColor_vert;
} else {
    std::string vertexFilePath = fileUtiles->fullPathForFilename(vert);
    vertSource = fileUtiles->getStringFromFile(vertexFilePath);
}

auto glprogram = GLProgram::createWithByteArrays(vertSource.c_str(), fragSource.c_str());
auto glprogramstate = GLProgramState::getOrCreateWithGLProgram(glprogram);
setGLProgramState(glprogramstate);
}

创建一个GLProgram,再去getOrCreate一个GLProgramState
再看GLProgramState::getOrCreateWithGLProgram()

GLProgramState* GLProgramState::getOrCreateWithGLProgram(GLProgram *glprogram)
{

GLProgramState* ret = GLProgramStateCache::getInstance()->getGLProgramState(glprogram);
return ret;
}

再看GLProgramStateCache::getGLProgramState(GLProgram* glprogram)
GLProgramState* GLProgramStateCache::getGLProgramState(GLProgram* glprogram)
{
const auto& itr = _glProgramStates.find(glprogram);
if (itr != _glProgramStates.end())
{
return itr->second;
}

auto ret = new (std::nothrow) GLProgramState;
if(ret && ret->init(glprogram)) {

_glProgramStates.insert(glprogram, ret);
ret->release();
return ret;
}

CC_SAFE_RELEASE(ret);
return ret;

}

这样看下来,每创建一个新的ShaderNode都会在GLProgramStateCache里面保留一份GLProgramState的cache,没有途径可以单独删除
然后由于GLProgramState在init的时候对GLProgram做了retain,所以GLProgram也删除不掉
这样每新建一个ShaderNode,内存就在涨啊涨

回到标题的问题上来,GLProgramStateCache::getGLProgramState(GLProgram* glprogram) 该怎么用?
如果我要创建很多带shader的sprite,貌似应该是创建好一个GLProgramState然后set到每个sprite,这时也用不到通过GLProgram去cache里查找一个GLProgramState吧?
如果我要创建很多带shader的sprite,每个sprite的shader的uniform参数不一样……要么就是大家公用一个GLProgramState每次draw之前重新设置uniform,要么就是大家用各自的GLProgramState,后者的话,按上述的情况看,这个cache在不停的增大……