glGetRenderbufferParameterivOES上的非零大小错误

时间:2012-11-08 18:36:12

标签: ipad ios5 opengl-es framebuffer layoutsubviews

这类似于stackoverflow上的另一个问题但是那里的大小是0,0而且我在这里得到了奇怪的非零大小。所以看起来这可能是一个不同的问题。

当我在layoutSubviews中配置帧缓冲区时会出现问题。

glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);

此次调用返回时,我获得的尺码为1139backingHeight)x 841backingWidth)。

这些尺寸看起来很奇怪,因为它们与我所知道的任何标准尺寸都不对应。

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的backingWidthbackingHeight。帧缓冲仍然会被创建,但我的内容基于错误的(更大的)大小并离开屏幕。

我在xcode 4.5.2上,而ipad在iOS 5.1.1上。我将继续追踪这一点,但没有什么可去的。

1 个答案:

答案 0 :(得分:0)

所以,我做了一些研究,并认为如果frame.layer的大小错误,那么我猜测它可能不是帧和opengl之间的大小问题转移。

问题出在xib文件中。

我拉开了xib,去了窗口,=>查看并拉开尺寸检查员。大小错误,因此鼠标可能无意中拖动了xib中的视图。这是一个微不足道的错误,但这是问题的根源 - 我纠正了xib,现在它工作正常。这需要花费几个多小时来诊断实际上是一个简单的修复,但我一直在诊断代码而不是xib。窗口在xib(1024,768)中的大小正确,并且灰色,因此xcode不允许您修改它,但视图大小可以修改,并且视图的大小错误地大于窗口。所以我手动将视图大小与窗口大小匹配。

感谢任何可能试图解决这个问题的人。

相关问题