3.13 ClippingNode的bug

问题描述: 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);
}

}

搞定:)

做论坛的程序员可以拉出去枪毙了
我一开始的标题是 关于ClippingNode使用Label做stencil的bug 死活不让发帖, 提示说标题不够详细。 各种加字符都不让发, 后来才发现是标题太长

感谢分享~这个论坛用的是开源论坛Discourse,提示标题不够细可能是它出于防灌水之类问题的考虑吧。我的经验是标题太长的话在中间加个空格就行了。。