【发布时间】:2014-03-19 14:53:05
【问题描述】:
我有一个带有完全透明窗口的 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) 时,它会变成绿色。有没有办法获取底色数据?
【问题讨论】:
-
这里有同样的问题。完全透明的背景就像黑色一样。
标签: windows macos cocoa opengl