CCClippingnode导致OpenGL错误0x0502

时间:2015-04-29 19:55:13

标签: ios objective-c cocos2d-iphone opengl-es ccsprite

我正在使用cocos2d-iPhone v.2.2,更新旧游戏,并且我有一个导致错误的裁剪节点。在AppDelegate.m中,我将设置切换为使用CCClippingNode:

CCGLView *glView = [CCGLView viewWithFrame:[window_ bounds]
                               pixelFormat:kEAGLColorFormatRGB565
                               depthFormat:GL_DEPTH24_STENCIL8_OES //switched from 0
                        preserveBackbuffer:NO
                                sharegroup:nil
                             multiSampling:NO
                           numberOfSamples:0];

然后我用这段代码在mainGame.m

中制作剪辑器
//after interface
@property (nonatomic, strong) CCClippingNode *shadowClipper;

//in the init method
CCSprite *stencil = [CCSprite spriteWithSpriteFrameName:@"clipper.png"];
stencil.position = ccp(winSize.width/2, winSize.height/2);
_shadowClipper = [CCClippingNode clippingNodeWithStencil:stencil];
_shadowClipper.alphaThreshold = 0.0;
[_gameLayer addChild:_shadowClipper z:2];

控制台记录" OpenGL错误0x0502 in - [CCSprite draw] 530"但除此之外,裁剪节点正在做它在模拟器中应该做的事情。有关导致错误的原因以及我可以采取哪些措施来解决错误的想法?

1 个答案:

答案 0 :(得分:0)

我正在使用两个嵌套的CCClippingNodes,这两个嵌套alphaThreshold设置为< 1.观察到的错误每帧发生一次。在CCSprite的第530行报告(!),但在第285行的CCClippingNode中出现:

[program setUniformLocation:alphaValueLocation withF1:_alphaThreshold];

如果alphaThreshold小于1,CCClippingNode会为其所有模板节点指定alpha测试着色器。当它在上面的行中更新alpha阈值uniform时,它会在不调用glUseProgram之前这样做,因此实现会尝试设置一个可能不存在于当前绑定着色器中的统一。

CCClippingNode中的上一行之前添加以下行,以在设置均匀之前绑定着色器程序。这应该摆脱错误。

[program use];

CCClippingNode似乎有点粗糙,至少是alpha测试实现......