【发布时间】:2012-11-08 18:36:11
【问题描述】:
这类似于 stackoverflow 上的另一个问题,但大小为0,0,在这里我弄错了奇怪的非零大小。所以看起来这可能是一个不同的问题。
问题发生在我在 layoutSubviews 中配置帧缓冲区时。
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
当这个调用返回时,我得到的大小是1139 (backingHeight) x 841 (backingWidth)。
这些尺寸看起来很奇怪,因为它们不符合我所知道的任何标准尺寸。
ipad 面向纵向模式。堆栈以layoutSubviews 开头。我阅读了一些较早的线程,并决定将调用推迟到 layoutSubviews 可能已经完成视图稳定时。但即使我将帧缓冲区创建延迟到显示链接回调,值也没有改善,仍然是 1139 (h) x 841 (w)。
此外,如果我在调试器中检查 UIScreen mainScreen 上的边界大小,我会得到 1024x768。
(lldb) print ((CGRect)[[ UIScreen mainScreen ] bounds ]).size.height
(CGFloat) $0 = 1024
(lldb) print ((CGRect)[[ UIScreen mainScreen ] bounds ]).size.width
(CGFloat) $1 = 768
因此,不知何故,这些界限似乎没有延续到 OpenGL EAGLayer 的 backingWidth 和 backingHeight。仍然会创建帧缓冲区,但我的内容基于错误(更大)的尺寸并离开了屏幕。
我使用的是 xcode 4.5.2,而 ipad 使用的是 iOS 5.1.1。我会继续追查这个,但没什么可做的。
【问题讨论】:
-
一些额外的数据,layer.frame 也带有不正确的尺寸 (lldb) print self.layer.frame (CGRect) $3 = origin=(x=0, y=20) size=(宽度=841,高度=1139)
标签: ipad ios5 opengl-es framebuffer layoutsubviews