我正在尝试移植Apple GLPaint示例以使用GLKit。使用UIView,可以返回 View 的CAEAGLLayer并设置drawableProperties使其包含kEAGLDrawablePropertyRetainedBacking。如预期的那样,这具有在呈现渲染缓冲区后保留可绘制内容的效果。删除此属性会导致在draw调用之后出现闪烁,其中部分可绘制内容似乎被绘制到了不同的缓冲区。

问题是这正是我现在在GLKView中遇到的问题,但是似乎没有设置可绘制属性的方法。返回CAEAGLLayer并设置属性无效,并且我看不到GLKView的任何相关属性来设置保留的后备。

还有其他人遇到这个问题或有解决方案吗?

最佳答案

如果要在GLKView中获取kEAGLDrawablePropertyRetainedBacking,请在项目中添加以下类别。

@interface CAEAGLLayer (Retained)

@end

@implementation CAEAGLLayer (Retained)

- (NSDictionary*) drawableProperties
{
    return @{kEAGLDrawablePropertyRetainedBacking : @(YES)};
}

@end

在GLKView维护的CAEAGLLayer上设置drawableProperties无效,因为GLKView绑定(bind)其可绘制对象并生成其呈现存储时会覆盖这些属性。使用此方法将强制GLKView改为使用类别的返回的drawableProperties。

关于iphone - GLKView设置可绘制属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9395743/

10-13 04:29