我正在使用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"但除此之外,裁剪节点正在做它在模拟器中应该做的事情。有关导致错误的原因以及我可以采取哪些措施来解决错误的想法?
答案 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测试实现......