ios - 在 OpenGL ES 中复制 UIView drawRect

标签 ios opengl-es uiview drawrect

我的 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/

相关文章:

ios - 我应该如何实现点(在 :with:)? 内

ios - 如何实现执行 contentStretch 逆操作的 UIView?

ios - 在应用程序启动时, subview 在设备的不同初始方向上采用不同的帧大小

ios - 是否可以编辑 MPMediaItem 的元数据?

ios - Swift 3.0 中的 UICollectionViewController 错误 : must be initialized with a non-nil layout parameter

android - glDrawElements 在设备上崩溃,在模拟器上运行良好

android - AndEngine:两个 Sprite 的碰撞

opengl-es - 使用 CVPixelBufferRef 和 Shaders 在 ffmpeg 的 OpenGL 中渲染 YUV 视频

ios - 用于从 coredata 查询字符串的子字符串的谓词

iOS定位精度和距离显着变化