renderbufferStorage在iPad AIR上失败但在iPad Retina gen 4上失败

时间:2015-07-20 18:21:55

标签: ios xcode ipad cocos2d-iphone

我已经在Google和这里搜索了这个问题的答案。我发现了类似的问题,但不是这个问题,也没有答案。我也是xCode和Apple开发的新手,在Apple开发人员离开后我继承了这个项目。

这是使用cocos2d v0.99.4-rc3,iOS 8.3,Xcode 6.3.2。此外,这适用于iOS 7.1和我升级xCode之前。我同时在iPad上升级了xCode和iOS。

在下面的代码中,iPad Retina上的backingWidth_和backingHeight_设置为1536和2048,但在iPad AIR上设置为0。

当我在执行renderbufferStorage后调用glGetError()时,在AIR上返回0x0501(GL_INVALID_VALUE),但在Retina上返回0x0000,所以我认为当#b;'层时,renderbufferStorage存在问题。为AIR传递给它。在执行glBindRenderbufferOES()之后调用glGetError()会为AIR和Retina返回0x0000。我在Build Settings中为Valid Architectures列出了arm64,armv7和armv7s;但只有armv7和arm64显示在显示体系结构的第一行,就在Base SDK之上。

- (BOOL)resizeFromLayer:(CAEAGLLayer *)layer
{   
    // Allocate color buffer backing based on the current layer size
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer_);
    [context_ renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:layer]; //This is fine on iPad Retina but causes error for AIR
    GLenum_error = glGetError(); //this returns 0x0501 (GL_INVALID_VALUE)on the iPad AIR, but 0x0000 on the Retina.

    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth_); //equals 1536 on Retina, 0 on AIR
    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight_); //equals 2048 on Retina, 0 on AIR

    if (glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) //this fails, so the resizeFromLayer returns NO.
{
    NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
    return NO;
}

从layoutSubviews()

调用resizeFromLayer
- (void) layoutSubviews
{
    [renderer_ resizeFromLayer:(CAEAGLLayer*)self.layer];
    size_ = [renderer_ backingSize];

    // Avoid flicker. Issue #350
    [[CCDirector sharedDirector] drawScene];
}

有没有其他人经历过这个以及你是如何纠正它的。这里的一个条目讨论了破坏帧缓冲区,然后在resizeFromLayer中获得黑屏时创建一个新的帧缓冲区,但这并不是AIR特有的。我还没有尝试过,但是如果有效的话,我会将其作为可能的解决方案发布。关于该解决方案的一些评论说它是真正的潜在问题的掩盖,这就是为什么我要问这个。

应用程序代码在Retina和AIR上成功构建,但在iPad和模拟器中,AIR显然显示黑屏,因为调整大小时出现故障。

1 个答案:

答案 0 :(得分:0)

由于没有人回应,我花了一段时间来解决这个问题,特别是因为我是xCode,iOS和cocos2d的新手。该问题原来是一个64位/ 32位问题,正在使用较旧的Cocos2d版本。坐标偏移计算错误,图像大小返回为0.如果Cocos2d已升级到较新版本,则可能不会发生浮动/双重不匹配。