1

我的 iOS 应用程序使用 Core Graphics 绘制位图(与我的视图大小相同)。我想将位图的更新区域推送到屏幕上。(我使用了标准的 UIView drawRect 方法,但我有一些充分的理由切换到 OpenGL)。

我只想在 OpenGL 视图中复制与 UIView/CALayer drawRect 相同的行为。本质上,我想更新我的 OpenGL 视图上的脏矩形。而已。

到目前为止,我已经能够创建一个 OpenGL ES 1.1 视图,并在每次更新位图时使用单个四边形(顶点数组上的纹理)将我的整个位图推送到屏幕上。当然,这是非常低效的,因为我只需要刷新脏矩形,而不是整个视图。

在 OpenGL ES 中最有效的方法是什么?我应该使用四边形格子并更新与脏矩形相交的四边形的纹理吗?(如果我要使用那个方法,我应该使用 VBO 吗?)有没有更好的方法来做到这一点?

仅供参考(以防万一),我不需要旋转,但需要缩放整个 OpenGL 视图。

更新:这种方法确实有效。但是,在视网膜显示设备上的 iOS5.x 中存在一个错误,该错误会在使用单缓冲时产生伪影。该问题已在 iOS6 中得到修复。我还没有解决办法。

4

1 回答 1

1

您可以简单地使用 TexSubImage 更新纹理的一部分,然后重绘您的标准全屏四边形,但将剪刀矩形蜂设置 (glScissor) 设置为“脏”部分。然后 GL 将不会在该矩形之外绘制任何片段。

为此,您当然必须使用单缓冲。

于 2012-10-07T21:45:25.800 回答