2

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

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

4

1 回答 1

1

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

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

于 2013-04-05T19:10:18.480 回答