我的 iOS 应用程序使用 Core Graphics 绘制成位图(与我的 View 大小相同)。我想将位图的更新区域推送到屏幕上。 (我使用了标准的 UIView drawRect 方法,但我有一些充分的理由切换到 OpenGL)。
我只想在 OpenGL View 中复制与 UIView/CALayer drawRect 相同的行为。本质上,我想更新我的 OpenGL View 上的脏矩形。仅此而已。
到目前为止,我已经能够创建一个 OpenGL ES 1.1 View ,并为我的位图的每次更新使用单个四边形(顶点数组上的纹理)将我的整个位图推送到屏幕上。当然,这是非常低效的,因为我只需要刷新脏矩形,而不是整个 View 。
在 OpenGL ES 中最有效的方法是什么?我应该使用四边形的格子并更新与脏矩形相交的四边形的纹理吗? (如果我要使用那种方法,我应该使用 VBO 吗?)有更好的方法吗?
仅供引用(以防万一),我不需要旋转但需要缩放整个 OpenGL View 。
更新: 这个方法确实有效。但是,在视网膜显示设备上的 iOS5.x 中存在一个错误,该错误会在使用单缓冲时产生伪像。该问题已在 iOS6 中修复。我还没有变通办法。
最佳答案
您可以简单地使用 TexSubImage 更新纹理的一部分,然后重绘标准的全屏四边形,但将剪刀矩形设置 (glScissor) 设置为“脏”部分。然后 GL 将不会在该矩形之外绘制任何片段。
为此,您当然必须使用单缓冲。
关于ios - 在 OpenGL ES 中复制 UIView drawRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12772723/