2011-09-10 180 views
4

我目前使用glReadPixels來抓取OpenGL ES遊戲的截圖。屏幕截圖非常棒,但撥打glReadPixels會導致遊戲中出現小口吃。glCopyTexImage2D替代glReadPixels(OpenGL ES)

glCopyTexImage2D已被建議作爲glReadPixels的更有效的替代品。 glCopyTexImage2D如何工作?在某些情況下,我正在使用this Apple method

我是比較新的OpenGL的,所以任何的幫助深表感謝:-)

回答

12

時間延遲通過轉移GPU和CPU之間的大量的內存造成的。這可以通過以每幀一點點的方式傳輸塊來解決。但是,如果您通過一系列幀讀取幀緩衝區,則圖像會在同時發生變化。

所以你製作一個副本,視頻RAM到視頻RAM(速度非常快),然後它不會隨着你的零碎轉移而改變。

+0

VRAM如何複製VRAM?它是否複製幀緩衝區的內容?也許我可以使用glCopyTexImage2D? – SundayMonday

+1

@MrMusic:是的,它從幀緩衝區複製到備用緩衝區。根據OpenGL版本的不同,您可能會使用一個輔助緩衝區(glDrawBuffer和glReadBuffer + glCopyPixels)用於VRAM-VRAM副本,然後使用glReadBuffer + glReadPixels將每個區塊僅返回到CPU )。在較新版本的OpenGL中,您可以使用VBO,但由於您使用的是OpenGL ES,因此請先嚐試舊的方式。 –

+0

+1讓我覺得自己像個白癡 – slf

相關問題