0

我有一个显示 CIFilter 的 CIImage 的 GLKView。当我通过捏合手势调整视图框架的大小时,我得到了低帧率。这背后的问题是什么?我怎样才能适应它?

4

1 回答 1

1

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

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

所以一般来说,你不应该简单地尝试缩放、缩放你渲染的视图,因为你需要一个更大的缓冲区。当从视图创建缓冲区时,它的大小与视图本身乘以您设置的内容比例(@2x,@3x)的大小相同。因此,在缩放时,您实际上会缩放视图,然后将其调整为需要时间的新大小。但是,如果您不调整它的大小,您将失去分辨率。因此,从我所见,更改投影矩阵是可行的方法,并且很有可能从滚动视图中传输数据,以便获得所有弹跳效果等。

如果您已经在使用显示链接(无论交互如何都继续重绘视图),请注意,则无需监听滚动视图事件。您只需在绘制的每一帧上获取滚动视图的可见矩形。这将删除一些代码。

于 2016-03-07T10:35:00.937 回答