问题描述: win32上ClippingNode可以用Label做stencil, 手机上不行
原因:
- win32的OpenGL可以直接做alphaTest 手机上的OpenGL ES不行, 所以手机是用shader实现的。
- ClippingNode会调用stencil的setGLProgram
- 当Label使用系统字体时, 实际参与渲染的是_textSprite。 而Label没有重载Node::setGLProgram 导致ClippingNode调用Label的setGLProgram时只改了Label的Program, 而实际执行渲染的_textSprite并不是Label的子节点所以textSprite的setGLProgram没有被调用
解决方法:重载setGLProgram
void Label::setGLProgram(GLProgram *glprogram)
{
Node::setGLProgram(glprogram);
if (_textSprite)
{
if (_shadowNode)
{
_shadowNode->setGLProgram(glprogram);
}
_textSprite->setGLProgram(glprogram);
}
}
搞定:)