我无法找到保留CAMetalLayer支持的方法,因为nextDrawable每次从池中提供不同的MTLTexture。即使我在渲染过程描述符上设置了适当的loadAction和storeAction,也不会发生支持。内容闪烁,因为纹理被nextDrawable调用交换。
我想在OpenGL ES中对kEAGLDrawablePropertyRetainedBacking采取类似的行为。
有人想出这个吗?
答案 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)