在 iOS 5 中,引入了 OpenGL ES 纹理缓存,以提供从相机视频数据到 OpenGL 的直接方式,而无需复制缓冲区。里面有关于纹理缓存的简单介绍会议 414 - WWDC 2011 的 iOS 5 OpenGL ES 进展 http://adcdownload.apple.com//wwdc_2011/adc_on_itunes__wwdc11_sessions__pdf/414_advances_in_opengl_es_for_ios_5.pdf.
我发现了一个有趣的article http://allmybrain.com/2011/12/08/rendering-to-a-texture-with-ios-5-texture-cache-api/最终进一步滥用了这个概念并规避了对glReadPixels
通过简单地锁定纹理,然后直接访问缓冲区。
glReadPixels
由于 iPad 2 中使用基于图块的渲染器(即使仅使用 1x1 纹理),速度确实很慢。然而,所描述的方法似乎比glReadPixels
.
文章中提出的方法是否有效?它是否可以用于增强依赖于glReadPixels
?
由于OpenGL与CPU并行处理图形数据,那么应该如何处理图形数据呢?CVPixelBufferLockBaseAddress
在不与 OpenGL 对话的情况下调用知道渲染何时完成?
我描述了一种这样做的方法这个答案 https://stackoverflow.com/a/9704392/19679,基于您上面链接的文章和 WWDC 2011 中 Apple 的 ChromaKey 示例。鉴于 Apple 在他们的一个示例中使用了这一点,并且我没有听到他们的 OpenGL ES 工程师对此提出反驳,我相信这是有效的使用纹理缓存。它适用于我尝试过的所有 iOS 5.x 兼容设备,也适用于 iOS 5.0 和 5.1。它比glReadPixels()
.
至于何时锁定像素缓冲区基地址,您应该能够使用glFlush()
或类似的阻塞,直到所有数据都渲染到您的 FBO 纹理。这似乎适用于我通过纹理支持的 FBO 完成的 30 FPS 1080p 电影编码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)