@kkvskkkk 写道:
问题描述: win32上ClippingNode可以用Label做stencil, 手机上不行
原因:
1. win32的OpenGL可以直接做alphaTest 手机上的OpenGL ES不行, 所以手机是用shader实现的。
2. ClippingNode会调用stencil的setGLProgram
3. 当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); }
}
搞定
帖子: 3
参与者: 1