2013-04-05 48 views
2

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

我的问题是,如果OpenGL有内置任何东西来简化它(即使用ByteBuffer数组就像一个纹理)?是否有可能在ByteBuffer数组上使用sampler2D或等价物?

+0

@ChristianRau谢谢,glTexSubImage2D做到了。据我所见,没有任何滞后! – dac2009 2013-04-05 17:51:37

回答

1

“但是,它感觉我已经得到了那个ByteBuffer” - 你明白了,但OpenGL没有。所以你把这些数据放入你的纹理莫名其妙。 OpenGL无法使用任意CPU数据进行纹理处理。您可以通过将视频帧直接放入映射的PBO(如果ES支持它们)而不是ByteBuffer(如果在您的框架中甚至可能),然后将其从此PBO复制到纹理中,其中可能给你买东西。但无论如何,你都有来电glTexSubImage2D(并且一定不要忘记那里有Sub,否则你会重新分配整个纹理存储每一帧)。