OpenGL ES纹理流或映射

本文关键字:映射 纹理 ES OpenGL | 更新日期: 2024-10-20 23:16:49

情况

我有一个来自iOS原生库的视频流。我正在尝试使用glTexImage2DglTexSubImage2DiPhoneOSGameView中显示图像以进行更新。我可以更新图像的子区域,我收到一个结构,告诉我哪个矩形必须在gpu上更新。

问题

帧速率很低。在OpenGLES和应用程序代码中进行了大量分析之后,我得出结论,应用程序通常正在等待纹理上传。慢函数是glClear,但我怀疑其中有一个内在的glFlush

我的问题

我看到一些人在谈论glMapBuffer,它可以让我将视频直接流式传输到用户空间中的纹理。我看过像素缓冲区对象,但它们需要OpenGLES3.0或2.0中的扩展。有没有一种有效的方法(对于移动设备)用最少的内存复制来流式传输纹理,或者从不同的线程传输纹理?

附加信息

我在C#Xamarin工作,正在不同的设备上进行测试,如iPod Touch Gen3、iPad Air 2和iPad Pro 12"。

OpenGL ES纹理流或映射

有一种有效的方法(对于移动设备)流式传输纹理,只需最少的内存复制

大多数操作系统都有一些媒体框架,允许使用EGL_image_external扩展直接导入图像,而无需上传。我不确定它在iOS上是如何工作的,但我强烈怀疑这应该是可能的。不幸的是,它是特定于操作系统的,所以没有标准的方法

还是一种从不同的线程传递纹理的方法?

只需在同一共享组中创建两个GL上下文。

https://developer.apple.com/library/ios/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/ConcurrencyandOpenGLES/ConcurrencyandOpenGLES.html