2013-04-05 29 views
2

我想以最有效的方式截取屏幕截圖。我使用FrameBuffer是截取屏幕最有效的方式,因爲我可以在不同於渲染線程的線程中處理數據。 我如何從FrameBuffer獲取信息並將其傳輸到文件?FrameBuffer到libgdx或OpenGL裏面的文件

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 
} 

回答

2

FrameBuffer內容駐留在內存中的OpenGL的管理,所以你會(據我瞭解的東西),仍然需要使用渲染線程OpenGL的API來獲取這些字節。具體而言,您需要the ScreenUtils class 以獲得byte[],其中包含您的FrameBufferRGBA8888內容。

一旦獲得原始字節,當然可以在不同的線程上執行任何壓縮/轉換/輸出。有一個forum post有一個快速和骯髒的PNG作家。 Libgdx特定的(?)CIM格式也是一個選項(請參閱PixmapIO class),但您必須先將字節轉換爲Pixmap

+0

「仍然需要在渲染線程上使用OpenGL API獲取這些字節」 - 通過這樣做,fps將降低到6.如果這可以在單獨的線程中完成將是有用的。 – Lunatikul 2013-06-26 13:09:23

+0

Libgdx(和下面的LWJGL)只允許一個線程執行OpenGL調用,所以沒有太多希望從渲染線程中獲得它。 – 2013-06-26 16:27:36