【问题标题】:OpenGL ES Texture streaming or mappingOpenGL ES 纹理流式传输或映射
【发布时间】:2016-04-23 16:33:22
【问题描述】:

情况

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

问题

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

我的问题

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

其他信息

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

【问题讨论】:

    标签: c# ios opengl-es xamarin.ios


    【解决方案1】:

    有一种有效的方式(用于移动设备)以最少的内存复制流式传输纹理

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

    或者一种从不同线程传输纹理的方法?

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

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

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      • 2011-05-04
      • 2011-03-16
      相关资源
      最近更新 更多