调整 GLKView 大小时的性能问题。
Performance issues with resizing GLKView.
我有一个显示 CIFilter 的 CIImage 的 GLKView。当我通过捏合手势调整视图框架大小时,我的帧率很低。这背后的问题是什么?我怎样才能适应它?
由于 API 的工作原理,它可能会在调整大小时创建一个新的帧缓冲区。可以使用自定义视图来执行此操作,因此 "Don't use GLKView" 将是一个答案。仍然缩放绑定到 openGL 的自定义视图会在缩放以显示缩放时给出糟糕的分辨率。
关于您正在做什么,您提供的信息太少了,但总的来说,它看起来像是在 openGL 中使用滚动视图。我通过在绘制视图的顶部添加一个滚动视图然后听取它的交互(滚动,缩放)来实现这样的系统。然后我计算了滚动视图内容视图的可见矩形,并在 openGL 投影矩阵中使用了相同的矩形。这只是用可见的帧参数调用 ortho
。
所以一般来说,您不应该简单地尝试缩放、缩放您渲染的视图,因为您将需要更大的缓冲区。当从视图创建缓冲区时,它的大小将与视图本身乘以您设置的内容比例(@2x、@3x)相同。因此,在缩放时,您实际上缩放了视图,然后将其调整为需要时间的新大小。但是,如果您不调整它的大小,您将失去分辨率。因此,据我所知,更改投影矩阵是可行的方法,并且很有可能从滚动视图传输数据,从而获得所有弹跳效果等。
请注意,如果您已经在使用显示器 link(无论交互如何,都继续重绘视图),则无需监听滚动视图事件。您只需在绘制的每一帧上获取滚动视图的可见矩形。这将删除一些代码。
我有一个显示 CIFilter 的 CIImage 的 GLKView。当我通过捏合手势调整视图框架大小时,我的帧率很低。这背后的问题是什么?我怎样才能适应它?
由于 API 的工作原理,它可能会在调整大小时创建一个新的帧缓冲区。可以使用自定义视图来执行此操作,因此 "Don't use GLKView" 将是一个答案。仍然缩放绑定到 openGL 的自定义视图会在缩放以显示缩放时给出糟糕的分辨率。
关于您正在做什么,您提供的信息太少了,但总的来说,它看起来像是在 openGL 中使用滚动视图。我通过在绘制视图的顶部添加一个滚动视图然后听取它的交互(滚动,缩放)来实现这样的系统。然后我计算了滚动视图内容视图的可见矩形,并在 openGL 投影矩阵中使用了相同的矩形。这只是用可见的帧参数调用 ortho
。
所以一般来说,您不应该简单地尝试缩放、缩放您渲染的视图,因为您将需要更大的缓冲区。当从视图创建缓冲区时,它的大小将与视图本身乘以您设置的内容比例(@2x、@3x)相同。因此,在缩放时,您实际上缩放了视图,然后将其调整为需要时间的新大小。但是,如果您不调整它的大小,您将失去分辨率。因此,据我所知,更改投影矩阵是可行的方法,并且很有可能从滚动视图传输数据,从而获得所有弹跳效果等。
请注意,如果您已经在使用显示器 link(无论交互如何,都继续重绘视图),则无需监听滚动视图事件。您只需在绘制的每一帧上获取滚动视图的可见矩形。这将删除一些代码。