我正在开发一个应该将视频数据流式传输到OpenGL(ES2)的应用程序。对于我视频的每一帧,我都可以获得包含所有数据的ByteBuffer。我想一种方法是将其转换为OpenGL纹理,然后在OpenGL中使用sampler2D。然而,感觉就像我已经得到了ByteBuffer一样,将数据发送到具有宽度和高度的OpenGL以及以某种方式读取着色器中的像素数据会更有效。应用程序将仅以2D显示视频,但应使用片段着色器对数据执行操作。
我的问题是,OpenGL是否内置了任何内容来简化此操作(即使用ByteBuffer数组作为纹理)?是否可以在ByteBuffer数组上使用sampler2D或等效文件?
答案 0 :(得分:1)
“然而,感觉就像我已经有了ByteBuffer” - 你明白了,但是OpenGL没有。所以你有将这些数据放入纹理以某种方式。 OpenGL无法使用任意CPU数据进行纹理处理。
然而,您可以通过将视频帧直接放入映射的PBO(如果ES支持它们)而不是ByteBuffer(如果在您的框架中甚至可能),然后将其从此PBO复制到纹理中来流式传输它。 可能给你买东西。但无论如何,你有来调用glTexSubImage2D
(并且一定不要忘记那里的Sub
,否则你将每帧重新分配整个纹理存储。)< / p>