我想在我的应用程序中实现一些基本的OpenGL,并且这样做时,我使用SDK附带的GLPaint示例作为跳转点。我的代码自行运行良好,但是一旦我将所有内容移至我的应用程序,相同的代码就会失败。当我调整大小时,OpenGL绘图搞砸了CAEAGLLayer
根据我的尝试,问题是(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);
我试图在这里改变价值观,和其他地方的移动这些台词,但什么我已经试过了工作。任何人对我有任何建议?
这是真实的(和一个错误)期间的iOS 4.3测试期间,但不再是真实的。 –
@quixoto:我正在测试的iOS 4(非beta版)iOS 4.3在过去的2个小时里给我带来了麻烦,直到我重新排列了所有东西以保持CAEAGLLayer的宽度和高度为8的倍数。 – Anomie