2013-04-05 4 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 을 입력하면 FrameBuffer의 내용이 RGBA8888byte[]이됩니다.

일단 원시 바이트를 얻으면 물론 다른 스레드에서 압축/변환/출력을 수행 할 수 있습니다. 빠르고 불결한 PNG 작성기가있는 forum post이 있습니다. Libgdx 관련 (?) CIM 형식도 옵션입니다 (PixmapIO class 참조).하지만 먼저 바이트를 Pixmap으로 변환해야합니다.

+0

"여전히 렌더링 스레드에서 OpenGL API를 사용하여 해당 바이트를 가져와야합니다."- fps가 6으로 떨어짐으로써.이 작업이 별도의 스레드에서 수행 될 수 있다면 유용 할 것입니다. – Lunatikul

+0

Libgdx (및 LWJGL 밑)는 단일 스레드가 OpenGL 호출을 할 수 있도록 허용하기 때문에 렌더링 스레드에서 꺼내기를 기대하지는 않습니다. –

관련 문제