2014-03-19 65 views
2

我有一個OpenGL應用程序,完全透明的窗口,我需要繪製一個圖片到像素透明度取決於背景。有沒有什麼方法可以讓我的透明窗口(如牆紙,桌面,另一個窗口等)以下的背景像素數據,所以我可以動態改變着色器中的像素?OpenGL獲取背景像素信息

現在我有這樣

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_COLOR, GL_DST_COLOR); 
glClearColor(1.0, 0, 0, 1.0); 
glClear(GL_COLOR_BUFFER_BIT); 
[self.shader useShader]; 
[self drawTriangle]; 

useShader代碼只是調用glUseProgram程序和drawTriangle只是繪製一個測試三角形。

着色器是:

#version 120 

void main() 
{ 
    gl_FragColor = gl_SecondaryColor + vec4(0.0, 1.0, 0.0, 0.0); 
} 

所以,如果我清除窗口(1.0,0,0,1.0)我得到預期的黃色三角形,但是當我切換到(0,0, 0,0)變綠。有沒有辦法獲得底色數據?

+0

同樣的問題在這裏。完全透明的背景就像黑色一樣。 – Mehdzor

回答

4

有越來越是我下面的透明窗口

只需OpenGL的背景像素數據的方法嗎?不。實際上,你甚至無法讀回着色器中的目標幀緩衝區像素。

您將不得不使用操作特定功能來檢索窗口下方的屏幕內容作爲圖像,將其加載到紋理中並將其傳遞給渲染。

+0

這正是我的想法。謝謝你的迴應。 –