调整GLKView大小的性能问题。

时间:2016-03-07 10:02:17

标签: ios opengl-es glkview

我有一个显示CIFilter CIImage的GLKView。当我通过捏合手势调整视图框架的大小时,我的帧速率很低。这有什么问题?我怎么能适合它?

1 个答案:

答案 0 :(得分:1)

由于此API的工作原理,它可能会在调整大小时创建一个新的帧缓冲区。可以使用自定义视图执行此操作,因此不要使用GLKView"会是一个答案。当缩放以显示缩放时,仍然缩放绑定到openGL的自定义视图会给出错误的分辨率。

你提供的关于你正在做什么的信息太少,但总的来说看起来就像使用带有openGL的滚动视图。我已经通过在绘制的视图顶部添加滚动视图然后听取它的交互(滚动,缩放)来实现这样的系统。然后我计算了滚动视图内容视图的可见rect,并在openGL投影矩阵中使用了相同的矩形。这只是使用可见的帧参数调用ortho

因此,一般情况下,您不应该只是尝试缩放,缩放渲染的视图,因为您需要更大的缓冲区。从视图创建缓冲区时,它将与视图本身相同的大小乘以您设置的内容比例(@ 2x,@ 3x)。因此,在缩放时,您实际缩放视图,然后应该调整大小,这需要花费时间。但如果你不调整大小,你将失去分辨率。因此,根据我所看到的,改变投影矩阵是可行的方法,很有可能从滚动视图传输数据,以便获得所有的弹跳效果等。

如果您已经在使用显示链接(不管交互如何都保持重绘视图),那么只需注意一下即可,无需收听滚动视图事件。您只需在绘制的每个帧上获取滚动视图的可见rect。这将删除一些代码。