2013-04-05 45 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,否則你會重新分配整個紋理存儲每一幀)。