Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在OpenGL中将ByteBuffer用作纹理_Java_Video_Opengl Es_Jogl_Fragment Shader - Fatal编程技术网

Java 在OpenGL中将ByteBuffer用作纹理

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是否内置了任何东西来简化这一点(即使

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

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

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


但是,您可以通过将视频帧直接放入映射的PBO(如果ES支持)而不是ByteBuffer(如果在您的框架内可能)来流式传输,然后将其从该PBO复制到纹理中,这可能会给您带来一些好处。但无论如何,您必须调用
glTexSubImage2D
(请确保不要忘记其中的
Sub
,否则您将重新分配每个帧的整个纹理存储)。

@ChristianRau谢谢,glTexSubImage2D做到了这一点。就我所能看到的,一点也不滞后!