gpt4 book ai didi

opengl-es - 使用 OpenGL ES 2.0 传输纹理的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-04 13:50:18 24 4
gpt4 key购买 nike

由于像素缓冲对象在 OpenGL ES 2.0 中不可用,将纹理传输到 GPU(并再次传输回来)的最快方法是什么?我们可以使用适用于 iPad 2 或更高版本的任何扩展吗?

不幸的是,我不能使用压缩纹理,因为纹理 (RGBA8) 是在应用程序的另一部分动态生成的。

最佳答案

对于 iOS(考虑到此处对 iPad 的引用,我假设它是您的平台),进出未压缩纹理的最快方法是通过纹理缓存。这些是在 iOS 5.0 中引入的,基本上是在纹理的后备字节和本地内存字节缓冲区之间进行直接内存映射。

对于使用 CVOpenGLESTextureCacheRef 的上传,我在 this answer 中描述了该过程.不过,摄像机有点特殊,因为它提供了像素缓冲区供您使用。对于其他用途,您将自己创建像素缓冲区并将内存关联到本地字节缓冲区以上传到纹理中。在我的基准测试中,初始上传并不比 glTexImage2D() 快,但我相信这些字节的后续修改更快。

我在this answer中讲到使用纹理缓存从FBO纹理目标中捕获的过程.该答案也针对特定用例,即视频编码,但可以将相同的基本原理与您自己的自定义像素缓冲区一起使用以提取原始字节。在我进行基准测试的几乎所有情况下,这都比 glReadPixels() 快。

当然,最快的方法是不必在 CPU 和 GPU 之间来回切换。如果可以,利用 FBO 纹理目标和共享组来将所有渲染都保存在 GPU 上。

关于opengl-es - 使用 OpenGL ES 2.0 传输纹理的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17339710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com