我正在编写一个应用程序,将一些沉重的绘图卸载到EAGLView中,它在UIKit上做了一些轻量级的东西。似乎在方向更改期间GL渲染被缓存到某个地方,我无法弄清楚如何访问它。具体做法是:
答案 0 :(得分:0)
答案 1 :(得分:0)
更改方向后,调用
glClear(GL_COLOR_BUFFER_BIT)
还不足以清除GL显示(绘图在某处缓存?)如何清除此缓存?
你正在绘制一个离屏图像。当您致电-presentRenderbuffer
时,该图片仅可用于CoreAnimation合成。
更改了方向后,
glReadPixel()
无法再访问方向更改前绘制的像素。如何才能访问存储位置?
我假设你正在使用RetainedBacking
选项。如果没有该选项,即使在旋转之外,也无法读取前一帧的内容。当您致电-presentRenderbuffer
时,屏幕外图像的内容将被发送到CA进行合成,并且新图像将取代它。新图像的内容未定义。
假设您正在使用从EAGLView示例代码派生的内容并且您正在使用RetainedBacking
,则在轮换发生时,通过释放和重新分配来调整帧缓冲区的大小。发生这种情况时,任何现有内容都将丢失。
您可以:
1)通过调用ReadPixels来自行保存内容
2)永远不要重新分配帧缓冲区,而是使用transform属性旋转UIView(或CALayer)。这样做可能会在合成过程中造成相当大的性能损失,但是您可以获得正在寻找的旋转,而无需调整帧缓冲区的大小。