如何保留CAMetalLayer的支持?

时间:2016-01-21 10:33:10

标签: ios opengl-es metal

我无法找到保留CAMetalLayer支持的方法,因为nextDrawable每次从池中提供不同的MTLTexture。即使我在渲染过程描述符上设置了适当的loadAction和storeAction,也不会发生支持。内容闪烁,因为纹理被nextDrawable调用交换。

我想在OpenGL ES中对kEAGLDrawablePropertyRetainedBacking采取类似的行为。

有人想出这个吗?

1 个答案:

答案 0 :(得分:4)

nextDrawable将始终为您提供未定义状态的纹理,据我所知,没有像kEAGLDrawablePropertyRetainedBacking这样的简单选项来改变这种行为。

但是,显然可以通过将旧的drawable保持一段时间并手动执行从前一个纹理到下一个纹理的GPU复制来实现副本。 https://devforums.apple.com/message/1060027#1060027

但是,您必须将CAMetalLayer.framebufferOnly设置为NO,否则会因性能而降低成本。根据文件(https://developer.apple.com/library/ios/documentation/Animation/Reference/CAMetalLayer_Ref/#//apple_ref/occ/instp/CAMetalLayer/framebufferOnly