【发布时间】:2011-11-07 19:47:23
【问题描述】:
我正在尝试在我的应用程序中实现一些基本的 OpenGL,在此过程中,我使用了 SDK 中包含的 GLPaint 示例作为起点。我的代码本身就可以正常工作,但是一旦我将所有内容移到我的应用程序中,相同的代码就会失败。
根据我的尝试,问题是(1)图元在第一次绘制时看起来被压扁,然后在绘制后续图元时浮动到屏幕顶部,或者(2)图元根本不出现.
我已将其范围缩小到我的应用程序需要调整 CAEAGLLayer 大小的事实。它在 UIScrollView 中,可以随时移动和调整大小(捏合、拖动等)。在 GLPaint 示例中,我吹掉帧缓冲区并在每次视图调整大小时重新创建它(通过 layoutSubviews),但这并不不工作。 (由于 GLPaint 示例从不调整大小,我怀疑这部分示例代码从来没有工作过,因为它从来不需要。)
仅当我将 CAEAGLLayer 设置为 1024 x 768 的恒定大小时,代码才能按预期工作:
self.layer.frame = CGRectMake(0, 0, 1024, 768);
一旦我将该行更改为:
self.layer.frame = self.bounds;
问题又回来了。我的 layoutSubviews 方法的其余部分如下所示:
[EAGLContext setCurrentContext:context];
[self destroyFramebuffer];
[self createFramebuffer];
if (needsClearView) {
[self clearView];
needsClearView = NO;
}
destroyFramebuffer 和 createFramebuffer 方法与 GLPaint 示例基本相同。唯一引用视图大小的其他代码是 initWithCoder 中的这些行:
glOrthof(0, self.bounds.size.width, 0, self.bounds.size.height, -1, 1);
glViewport(0, 0, self.bounds.size.width, self.bounds.size.height);
我已尝试更改此处的值,并将这些行移至其他位置,但我尝试过的任何方法都没有奏效。有人对我有什么建议吗?
【问题讨论】:
标签: iphone ios ipad opengl-es calayer