我正在尝试移植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/