我有一个带有完全透明窗口的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 :(得分:4)
有没有办法获得透明窗口以下的背景像素数据
只使用OpenGL?实际上,您甚至无法在着色器中读回目标帧缓冲区像素。
您必须使用特定于操作的功能来检索窗口下方的屏幕内容作为图像,将其加载到纹理中并将其传递给渲染。