【问题标题】:Wrong non-zero sizes on glGetRenderbufferParameterivOESglGetRenderbufferParameterivOES 上的非零大小错误
【发布时间】: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 的 backingWidthbackingHeight。仍然会创建帧缓冲区,但我的内容基于错误(更大)的尺寸并离开了屏幕。

我使用的是 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


【解决方案1】:

所以,我做了更多的研究,发现如果 frame.layer 携带错误的尺寸,那么我猜这可能不是 frame 和 opengl 之间的尺寸转移问题。

问题出在 xib 文件中。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 2022-01-11
    • 1970-01-01
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    相关资源
    最近更新 更多