【问题标题】:Using ByteBuffer as a Texture in OpenGL在 OpenGL 中使用 ByteBuffer 作为纹理
【发布时间】:2013-03-28 01:26:00
【问题描述】:

我正在开发应将视频数据流式传输到 OpenGL (ES2) 的应用程序。对于视频的每一帧,我可以获得一个包含所有数据的 ByteBuffer。我想一种方法是将其转换为 OpenGL 纹理,然后在 OpenGL 中使用 sampler2D。但是,感觉就像我已经得到了那个 ByteBuffer 一样,将具有宽度和高度的数据发送到 OpenGL 并以某种方式从着色器中读取像素数据会更有效。应用程序只会以 2D 显示视频,但应使用片段着色器对数据进行操作。

我的问题是 OpenGL 是否内置了任何东西来简化这一点(即使用 ByteBuffer 数组作为纹理)?是否可以在 ByteBuffer 数组上使用 sampler2D 或等效的?

【问题讨论】:

  • @ChristianRau 谢谢,glTexSubImage2D 成功了。据我所知,没有任何滞后!

标签: java video opengl-es jogl fragment-shader


【解决方案1】:

“但是,感觉就像我已经得到了那个 ByteBuffer” - 你得到了它,但 OpenGL 没有。所以你必须将这些数据以某种方式放入你的纹理中。 OpenGL 无法使用任意 CPU 数据进行纹理处理。

但是,您可以通过将视频帧直接放入映射的 PBO(如果 ES 支持它们)而不是 ByteBuffer(如果在您的框架内甚至可能的话)中进行流式传输,然后将其从该 PBO 复制到纹理中,这可能给你买东西。但无论如何,你必须调用glTexSubImage2D(并且一定不要忘记那里的Sub,否则你将在每一帧重新分配整个纹理存储)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-03
    • 2016-04-09
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多