首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >renderbufferStorage在iPad AIR上失败,但在iPad Retina gen 4上失败

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

Stack Overflow用户
提问于 2015-07-21 02:21:55
回答 1查看 119关注 0票数 0

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

这是使用cocos2d v0.99.4-rc3,iOS 8.3,Xcode6.3.2。此外,在我升级xCode之前,这在iOS 7.1上也有效。我同时升级了iPad上的xCode和iOS。

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

当我在执行renderbufferStorage之后调用glGetError()时,AIR返回0x0501 (GL_INVALID_VALUE),但视网膜返回0x0000,所以我认为当'layer‘被传递给AIR时,renderbufferStorage有问题。对于AIR和Retina,在执行glBindRenderbufferOES()之后调用glGetError()都会返回0x0000。我在构建设置中列出了有效架构的arm64、armv7和armv7s;但是在显示架构的第一行中只显示了armv7和arm64,就在Base SDK的正上方。

代码语言:javascript
复制
- (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

代码语言:javascript
复制
- (void) layoutSubviews
{
    [renderer_ resizeFromLayer:(CAEAGLLayer*)self.layer];
    size_ = [renderer_ backingSize];

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

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

应用程序代码在Retina和AIR上都成功构建,但在iPad和模拟器上,AIR明显显示黑屏,因为在调整大小时有些东西失败了。

EN

回答 1

Stack Overflow用户

发布于 2015-08-20 03:53:10

由于没有人响应,我花了一段时间才弄明白这一点,特别是因为我是xCode、iOS和cocos2d的新手。该问题被证明是正在使用的旧Cocos2d版本的64位/32位问题。坐标偏移量计算错误,图像大小返回为0。如果Cocos2d升级到较新的版本,则可能不会发生浮点/双精度不匹配的情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31523642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档