我有一个完全透明窗口的OpenGL应用程序,我需要绘制一个图片到像素透明度取决于背景。 有没有什么办法获得我的透明窗口(如墙纸,桌面,另一个窗口等)以下的背景像素数据,所以我可以dynamic改变着色器中的像素?
现在我有这样的代码
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只是绘制一个testing三angular形。
着色器是:
#version 120 void main() { gl_FragColor = gl_SecondaryColor + vec4(0.0, 1.0, 0.0, 0.0); }
所以如果我用(1.0,0,0,1.0)清除窗口,我会得到黄色的三angular形,但是当我切换到(0,0,0,0)时它变成了绿色。 有没有办法获得undercolor数据?
有没有什么办法获得我的透明窗口以下的背景像素数据
只用OpenGL? 不。实际上你甚至不能读回着色器中的目标帧缓冲区像素。
您将不得不使用特定于操作的功能以图像的形式检索窗口下方的屏幕内容,将其加载到纹理中并传递给渲染。