我正在尝试移植 Apples GLPaint 示例以使用 GLKit。使用 UIView,可以返回 View 的 CAEAGLLayer 并将 drawableProperties 设置为包含 kEAGLDrawablePropertyRetainedBacking。正如预期的那样,这具有在呈现渲染缓冲区后保留可绘制内容的效果。删除此属性会导致绘制调用后闪烁,部分可绘制内容似乎被绘制到不同的缓冲区。
问题是这正是我现在在 GLKView 中遇到的问题,但似乎没有办法设置可绘制属性。返回 CAEAGLLayer 并设置属性没有任何效果,并且我没有看到 GLKView 的任何相关属性来设置保留支持。
还有其他人遇到过这个问题或者有解决方案吗?
最佳答案
如果您想在 GLKView 中获取 kEAGLDrawablePropertyRetainedBacking,请将以下类别添加到您的项目中。
@interface CAEAGLLayer (Retained)
@end
@implementation CAEAGLLayer (Retained)
- (NSDictionary*) drawableProperties
{
return @{kEAGLDrawablePropertyRetainedBacking : @(YES)};
}
@end
在 GLKView 维护的 CAEAGLLayer 上设置可绘制属性不起作用,因为 GLKView 在绑定(bind)其可绘制对象并生成其渲染存储时会覆盖这些属性。使用此方法会强制 GLKView 使用您的类别返回的drawableProperties。
关于iphone - GLKView设置可绘制属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9395743/