File libgdx或OpenGL内部文件的帧缓冲区

File libgdx或OpenGL内部文件的帧缓冲区,file,png,screenshot,libgdx,File,Png,Screenshot,Libgdx,我试图以最有效的方式拍摄截图。我认为使用帧缓冲区是拍摄屏幕截图最有效的方法,因为我可以在不同的线程中处理数据,而不是在渲染线程中。 如何从帧缓冲区获取信息并将其传输到文件 FrameBuffer m_fbo; render(){ m_fbo = new FrameBuffer(Format.RGB565, (int)(w * m_fboScaler), (int)(h * m_fboScaler), false); m_fboRegion = new TextureRegion(m

我试图以最有效的方式拍摄截图。我认为使用帧缓冲区是拍摄屏幕截图最有效的方法,因为我可以在不同的线程中处理数据,而不是在渲染线程中。 如何从帧缓冲区获取信息并将其传输到文件

FrameBuffer m_fbo;

render(){
   m_fbo = new FrameBuffer(Format.RGB565, (int)(w * m_fboScaler), (int)(h * m_fboScaler), false);
   m_fboRegion = new TextureRegion(m_fbo.getColorBufferTexture());
   m_fboRegion.flip(false, true);
   m_fbo.begin();
   ...rendering...
   m_fbo.end();
   writeTextureRegionToFile(); - i need some lines of code for the implementation of this method
}

FrameBuffer
内容驻留在OpenGL管理的内存中,因此(据我所知)您仍然需要在渲染线程上使用OpenGL API获取这些字节。具体来说,你想要什么 获取包含
帧缓冲区
内容的
字节[]


获得原始字节后,当然可以在不同的线程上进行任何压缩/转换/输出。有一个写PNG的人写得又快又脏。Libgdx特定的(?)
CIM
格式也是一个选项(请参见),但是您必须首先将字节转换为
Pixmap

“仍然需要在渲染线程上使用OpenGL API获取这些字节”-通过这样做,fps将下降到6。如果这可以在单独的线程中完成,那将是非常有用的。Libgdx(和下面的LWJGL)只允许单个线程执行OpenGL调用,因此从渲染线程中获得它的希望不大。