2013-05-15 65 views
0

如何將繪製到幀緩衝區的數據傳遞到新的OpenGL程序或紋理?OpenGL - 將多個程序的輸出傳遞給新的紋理

什麼我現在所做的使用案例:

  • 從一個UIImage
  • 創建紋理通過結合它作爲一個GL_TEXTURE_2D和處理它
  • 開關程序和渲染上把它當作一個uniform sampler2D例如在圖像頂部的小插圖
  • 切換程序並渲染各種圖形

這一切工作正常。問題是,從這裏我想使用額外的OpenGL着色器來處理上述所有內容。例如亮度/對比度濾鏡。不僅僅是圖像,而是所有添加的圖形和小插圖。一旦添加了,我想將其傳遞給其他可選程序等。

但這是如何完成的?我知道我可以將它讀回紋理緩存或使用glReadPixels()並創建一個新的紋理來傳遞,但肯定會有更好更有效的方法嗎?一個完全使用GPU內存?

回答

1

你想要做的是直接渲染東西到紋理而不是顯示幀緩衝區。這又恰恰是幀緩存對象(FBO)的用途。一個FBO代表一個包含所有子緩衝區(如多個顏色緩衝區,深度緩衝區,模板緩衝區或其子集)的完整幀緩衝區,但具有將自定義數據容器(如渲染緩衝區或紋理)作爲單獨緩衝區,從而直接渲染到由您控制的某個GPU內存區域。對於那些看herehere一些更多的「官」,完整的信息的教程(儘管後者也可能討論ES不存在現代桌面GL版本的功能),或herehere一些相關的信息更ES(該不該「T是從桌面GL太大的不同,雖然)

+0

完美。 Apple鏈接中的部分「使用Framebuffer對象渲染到紋理」正是我所追求的。謝謝。 – BlueVoodoo