OpenGL ES纹理流或映射
本文关键字:映射 纹理 ES OpenGL | 更新日期: 2024-10-20 23:16:49
情况
我有一个来自iOS原生库的视频流。我正在尝试使用glTexImage2D
和glTexSubImage2D
在iPhoneOSGameView
中显示图像以进行更新。我可以更新图像的子区域,我收到一个结构,告诉我哪个矩形必须在gpu上更新。
问题
帧速率很低。在OpenGLES和应用程序代码中进行了大量分析之后,我得出结论,应用程序通常正在等待纹理上传。慢函数是glClear
,但我怀疑其中有一个内在的glFlush
。
我的问题
我看到一些人在谈论glMapBuffer
,它可以让我将视频直接流式传输到用户空间中的纹理。我看过像素缓冲区对象,但它们需要OpenGLES3.0或2.0中的扩展。有没有一种有效的方法(对于移动设备)用最少的内存复制来流式传输纹理,或者从不同的线程传输纹理?
附加信息
我在C#Xamarin工作,正在不同的设备上进行测试,如iPod Touch Gen3、iPad Air 2和iPad Pro 12"。
有一种有效的方法(对于移动设备)流式传输纹理,只需最少的内存复制
大多数操作系统都有一些媒体框架,允许使用EGL_image_external扩展直接导入图像,而无需上传。我不确定它在iOS上是如何工作的,但我强烈怀疑这应该是可能的。不幸的是,它是特定于操作系统的,所以没有标准的方法
还是一种从不同的线程传递纹理的方法?
只需在同一共享组中创建两个GL上下文。
https://developer.apple.com/library/ios/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/ConcurrencyandOpenGLES/ConcurrencyandOpenGLES.html