2013-01-16 22 views
3

我在代碼中成功使用FBO作爲渲染目標。這是我不清楚但是什麼樣的結果我能想到當我這樣做:在glFramebufferTexture2D()之後glReadPixels()的結果

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 
         GL_TEXTURE_2D, someRgbaTexture, 0); 
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, *someRgbaBuffer); 

中的OpenGL ES 2.0(假設FBO是GL_FRAMEBUFFER_COMPLETE)。

我的目標是獲取由someRgbaTexture引用的紋理內容。桌面OpenGL具有glGetTexImage()函數用於此目的,但它不存在於ES中。

someRgbaTexture設置爲讀取紋理,然後將屏幕填充紋理四元組轉換爲另一個FBO目標,然後回讀將確實做到這一點,但我想避免這種額外的傳遞。

因此:在調用glFramebufferTexture2D()之後,framebuffer的內容是否等於紋理的內容,或者這個調用是否意味着任何未來的渲染操作都將針對指定的紋理?
如果是後者:如果我的渲染操作只是寫一個像素或什麼都不寫就會發生什麼?那麼someRgbaTexture中的內容會有什麼保證呢?

+0

FBO不應該像這樣使用。看到這個[page](http://www.songho.ca/opengl/index.html) –

+0

@Fabien R,請給你的評論添加一個更詳細的解釋,並且描述一個人應該在[songho]( http://www.songho.ca)將回答上述問題。 – rsp1984

+0

在描述FBO的頁面上,您會找到示例代碼。它會給你提示FBO如何工作。 –

回答

2

這看起來完全合法,並且應該爲您提供glReadPixels()的紋理內容。

在ES 2.0規範的114頁,在glFramebufferTexture2D()的說明中,描述包括:

沒有變更紋理對象的狀態作出

這意味着,如果紋理以前有一個明確的內容,它仍然有glFramebufferTexture2D()後的內容。由於它現在是當前幀緩衝區的顏色緩衝區,所以它的內容將被glReadPixels()讀取。

相關問題