OpenGL获取背景像素信息

时间:2014-03-19 14:53:05

标签: windows macos cocoa 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)时,它变为绿色。有没有办法获得底色数据?

1 个答案:

答案 0 :(得分:4)

  

有没有办法获得透明窗口以下的背景像素数据

只使用OpenGL?实际上,您甚至无法在着色器中读回目标帧缓冲区像素。

您必须使用特定于操作的功能来检索窗口下方的屏幕内容作为图像,将其加载到纹理中并将其传递给渲染。

相关问题