我已经在谷歌和这里搜索了这个问题的答案。我也发现了类似的问题,但不是这个问题,没有答案。我也是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的正上方。
- (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明显显示黑屏,因为在调整大小时有些东西失败了。
发布于 2015-08-20 03:53:10
由于没有人响应,我花了一段时间才弄明白这一点,特别是因为我是xCode、iOS和cocos2d的新手。该问题被证明是正在使用的旧Cocos2d版本的64位/32位问题。坐标偏移量计算错误,图像大小返回为0。如果Cocos2d升级到较新的版本,则可能不会发生浮点/双精度不匹配的情况。
https://stackoverflow.com/questions/31523642
复制相似问题