2011-11-15 31 views
1

我使用OpenGL ES 2.0和GLSL繪製對象。 然後,我想從任何我的片段着色器在屏幕上繪製的像素中讀取像素。 我摻混兩種灰度紋理和我的片段着色器的最後,我有:GLSL和glReadPixelels

gl_FragColor = vec4(something...blending textures);

我知道gl_FragColor意味着最終的顏色將在幀緩衝區中寫入。 (據http://nehe.gamedev.net/article/glsl_an_introduction/25007/) 鑑於這種情況,我不喜歡的東西

GLubyte *pixels = new GLubyte[320*240]; 
glReadPixels(0, 0, 320,240, GL_LUMINANCE, GL_UNSIGNED_BYTE, pixels); 

使用,在第一次,我得到原來一樣texture1然後拿到黑空彩色圖像繪製後。有人可以幫我解決什麼問題嗎?我需要和FBO做些什麼嗎?我是一個有點失去了... :(

+1

我想glReadPixels後,你更新你的紋理輸入到下一幀的着色器之一?發佈一些更多的代碼來更新紋理,也許錯誤在那裏。 –

+1

請向我們展示您的程序中的代碼,這些代碼正在發佈。 – datenwolf

回答

3

每規範ES 2.0文檔glReadPixels,格式參數:

指定像素數據的格式以下符號值 接受:GL_ALPHA ,GL_RGB和GL_RGBA。

所以GL_LUMINANCE不是GL ES支持閱讀的格式。

除此之外,假設你有這麼一個工作幀緩衝我排序並且通過將適當放置的幾何圖形渲染到幀緩衝區來應用片段着色器,glReadPixels應該是正確的使用方法。