Java 在OpenGL中将ByteBuffer用作纹理
我ḿ 正在开发一个应用程序,该应用程序应将视频数据流化到OpenGL(ES2)中。对于视频的每一帧,我都可以得到一个包含所有数据的ByteBuffer。我想一种方法是将其转换为OpenGL纹理,然后在OpenGL中使用sampler2D。不过,我觉得我已经得到了ByteBuffer,只需将数据发送到OpenGL(具有宽度和高度),并以某种方式从着色器中读取像素数据,就会更有效。应用程序将仅以2D显示视频,但应使用片段着色器对数据执行操作 我的问题是OpenGL是否内置了任何东西来简化这一点(即使用ByteBuffer数组作为纹理)?有没有可能在ByteBuffer阵列上使用sampler2D或等效物?“但是,感觉我已经得到了ByteBuffer”-你得到了,但OpenGL没有。所以你必须以某种方式将这些数据放入你的纹理中。OpenGL无法使用任意CPU数据进行纹理处理Java 在OpenGL中将ByteBuffer用作纹理,java,video,opengl-es,jogl,fragment-shader,Java,Video,Opengl Es,Jogl,Fragment Shader,我ḿ 正在开发一个应用程序,该应用程序应将视频数据流化到OpenGL(ES2)中。对于视频的每一帧,我都可以得到一个包含所有数据的ByteBuffer。我想一种方法是将其转换为OpenGL纹理,然后在OpenGL中使用sampler2D。不过,我觉得我已经得到了ByteBuffer,只需将数据发送到OpenGL(具有宽度和高度),并以某种方式从着色器中读取像素数据,就会更有效。应用程序将仅以2D显示视频,但应使用片段着色器对数据执行操作 我的问题是OpenGL是否内置了任何东西来简化这一点(即使
但是,您可以通过将视频帧直接放入映射的PBO(如果ES支持)而不是ByteBuffer(如果在您的框架内可能)来流式传输,然后将其从该PBO复制到纹理中,这可能会给您带来一些好处。但无论如何,您必须调用
glTexSubImage2D
(请确保不要忘记其中的Sub
,否则您将重新分配每个帧的整个纹理存储)。@ChristianRau谢谢,glTexSubImage2D做到了这一点。就我所能看到的,一点也不滞后!