我有一个带有完全透明窗口的 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) 时,它会变成绿色。有没有办法获取底色数据?
最佳答案
Is there any way of getting background pixel data that are BELOW my transparent window
仅使用 OpenGL?不。事实上,您甚至无法在着色器中读回目标帧缓冲区像素。
您必须使用操作特定函数来检索窗口下方的屏幕内容作为图像,将其加载到纹理中并将其传递给渲染。
关于windows - OpenGL获取背景像素信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22509681/